Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

474
Visualizações
Laravel 5 multiple optional parameters in route

I have a problem with Laravel 5, and to be precise, I can't find the solution for it. In C# (ASP.NET MVC) it's easy to solve. For example, I have these routes (I'll just type the route content, and the function header, for the sake of simplicity)

/{category}/Page{page}
/Page{page}
/{category}

The function is defined inside Product controller. function header looks like this:

public function list($page = 1, $category = null)

the problem is, whenever I enter just one argument, it doesn't send the value for the parameter by the name I set in the route, but rather, it pushes values by function parameter order. So, when I open /Page1, it works properly, value of 1 is sent to $page variable, but when I access /Golf(made up on the spot), it also sends the value to the $page variable. Any possible idea how to avoid this, or do I really need to make different functions to handle these cases?

In C#, it properly sends the value, and keeps the default value for undefined parameter.

Hope you have an answer for me. Thank you in advance and have a nice day :)

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

So, as you've seen the parameters are passed to the function in order, not by name.

To achieve what you want, you can access these route parameters from within your function by type hinting the request object to it like this:

class ProductController extends Controller
{
    function list(Request $request){  # <----------- don't pass the params, just the request object

        $page = $request->route('page');   # <--- Then access by name
        $category = $request->route('category');

        dd("Page: $page | Category: $category");
    }
}

Then of course you would set all 3 of your routes to hit that same controller method:

Route::get('/{category}/Page{page}', 'ProductController@list');
Route::get('/Page{page}', 'ProductController@list');
Route::get('/{category}', 'ProductController@list');

Hope this helps..!

about 4 years ago · Santiago Trujillo Relatório

0

if you want to get the parameters in your controller, you can use this:

public function list() {
    $params = $this->getRouter()->getCurrentRoute()->parameters();
}

for /aaa/Page3, the $params would be array(category => 'aaa', page => '3')
for /Page3, the $params would be array(page => '3')
for /aaa, the $params would be array(category => 'aaa')

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda