Cum sa setez un parametru in URL ca si defaultl? LARAVEL

laravel

(s.vitel) #1

Salut,

Ma poate ajuta cineva cu o solutie cum sa adaug la URL un parametru (primul) ca si default in laravel?

deci as avea nevoie de asa ceva:

http://site.com/username/profile
unde username sa fie parametru default si sa pot accesa pagina cam asa:

Route::get('/profile', ['uses' => 'ProfileController@index', 'as' => 'profile.index'];

Multumesc


(Victor) #2

Pui parametru default in metoda index din ProfileController, nu in fisierul care descrie rutele.


(s.vitel) #3

ideea ar fi ca eu am nevoie de parametrul ala ca si default indiferent de controllerul sau metoda accesata, la fiecare accesare sau refresh a paginii. la prima accesare a paginii el trebuie setat, eu ma gandeam sa il salvez in session si mai apoi sa fie preluat de acolo. dar nu stiu cum sa il setez ca el sa fie automat ca si parametru URL default…

daca eu tastez www.site.ro/ el sa faca redirect catre www.site.ro/defaultparameter


(Floki) #4

Faci cum ți s-a spus mai sus.

public function myMethod($myParam = false)
{
    if(empty($myParam)) 
        return redirect(url("defaultparameter"));
    ...
}

(s.vitel) #5

deci daca eu inteleg corect, ar trebuie daca am 20 de Controllers si fiecare Controller are 5 metode, eu sunt nevoit sa adaug acelasi cod in 100 de locuri…? adica de fiecare data cand dau click undeva pe un link in pagina trebuie sa am grija sa fac redirect catre url(“defaultparameter”)?


(Andrei Avram) #6

Nu stiu tot contextul tau si daca-i bine ce vrei sa faci sau nu.
Ai putea sa verifici/setezi default value intr-un middleware (sau chiar sa faci redirect-ul).


(Floki) #7

Pentru cazul ăsta, folosește un middleware.


(s.vitel) #8

asta incerc sa fac. sa gasesc o solutie sa setez direct in middleware. doar ca nu gasesc una… :slight_smile


(Andrei Avram) #9

Vezi chiar exemplul lor: https://laravel.com/docs/5.7/middleware#defining-middleware


(Alex) #10

in general ma enerveaza intrebarile de genul asta, pt ca fiecare are motivele sale (pitici pe creier, clienti batuti in cap, specificatii ciudate, etc…)
…dar totusi… de ce ai vrea sa faci asta?

de ex, in exemplul dat de tine, username/profile, sa inteleg ca username-ul e variabila? de ce nu profile/username? care-i logica? ai controllerul vasile si accesezi metoda profile? de ce nu doar profile si daca lipseste parametrul folosesti username-ul userului logat?\

cum am spus, fiecare cu piticii lui


(s.vitel) #11

ideea e ca nu e nimeni logat. e un site gen, un client i-si salveaza date, etc. i-si creeaza ca si un site-portofoliu al lui sa zicem. adica fiecare pagina din site (home, about, skills, projects, contact, etc) ii apartin, is datele salvate anterior de dumnealui. accesand www.site.ro/vasile el are siteul lui. daca nu ar fi acel parametru vasile ar aparea altceva, pagina standard sa zicem.

nu is expert in laravel, il invat de vreo 3 saptamani, am prins ideea lui, pana acum nu am intampinat probleme, sau chiar daca am intampinat dupa ceva bataie de cap le-am rezolvat. acuma am chestia asta si mie greu sa cred ca nu este o solutie…


(Alex) #12

n-am avut de-a face pana acum cu scenariul asta, dar ai putea incerca ceva de genul route::get(’{username}’, …), route::get(’{username}/profile’, …), etc. n-am incercat, nu stiu daca functioneaza, teoretic ar trebui. dar trebuie sa ai grija la ordinea rutelor daca faci asa ceva. oricum o sa-ti faca probleme.


(s.vitel) #13

da exact asta e problema ca daca fac asta in route::get(), destul de greu spre imposibil, la un moment dat sa nu apara probleme. eu sper sa reusesc cunva cu middleware. sau caut alta solutie decat sa adaug un parametru default in URL, desi asta imi placea cel mai mult… multam’ oricum :slight_smile:


(Alex) #14

ai mai putea sa faci niste verificari inainte sa se incarci rutele si sa faci redirect inainte in caz ca-ti lipseste parametrul respectiv. si dupa aia faci grup de rute

//verifici daca ai ce-ti trebuie, daca nu faci redirect la mysite.com/ce-mi-trebuie

Route::prefix($default)->group(function ($r) {
   $r->get('/profile', ['uses' => 'ProfileController@index', 'as' => 'profile.index'];
}

(Igor Mardari) #15

https://laravel.com/docs/5.7/routing#route-parameters

Route::get('user/{name?}', function ($name = null) {
    return $name;
});

Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

Sau, pana la versiunea 5.2 de Laravel, merge implementarea asta


#16

@samuel.vitel uite cum am făcut eu pentru a seta county_slug:

Atunci când parametrul se găsește în URL

Route::get('{county_slug}/{category_slug}', 'CategoryController@showCategory')->where([
    'category_slug' => '[A-Z,a-z,\-]+',
    'county_slug' => $county_regex
])->name('county_category');

Atunci când parametrul respectiv nu se regăsește

Route::get('{category_slug}', function ($category_slug) {
    return App::call('App\Http\Controllers\CategoryController@showCategory', ['county_slug' => null, 'category_slug' => $category_slug]);
})->where('category_slug', '[A-Z,a-z,\-]+')->name('category');

Să ai grijă la ordinea în care definești route-le!

Iar asta am în controller

public function showCategory($county_slug = null, $slug)
{
...
}