Tengo un problema con Laravel 5 y, para ser precisos, no puedo encontrar la solución. En C# (ASP.NET MVC) es fácil de resolver. Por ejemplo, tengo estas rutas (solo escribiré el contenido de la ruta y el encabezado de la función, por simplicidad)
/{category}/Page{page} /Page{page} /{category}La función se define dentro del controlador del producto. El encabezado de la función se ve así:
public function list($page = 1, $category = null)el problema es que cada vez que ingreso solo un argumento, no envía el valor del parámetro por el nombre que configuré en la ruta, sino que empuja los valores por el orden de los parámetros de función. Entonces, cuando abro /Página1, funciona correctamente, el valor de 1 se envía a la variable $página, pero cuando accedo a /Golf (creado en el momento), también envía el valor a la variable $página. ¿Alguna idea posible de cómo evitar esto, o realmente necesito hacer diferentes funciones para manejar estos casos?
En C#, envía correctamente el valor y mantiene el valor predeterminado para el parámetro indefinido.
Espero que tengas una respuesta para mí. Gracias de antemano y que tengas un buen día :)
Entonces, como ha visto, los parámetros se pasan a la función en orden, no por nombre.
Para lograr lo que desea, puede acceder a estos parámetros de ruta desde su función escribiendo insinuando el objeto de solicitud de esta manera:
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"); } }Luego, por supuesto, configuraría las 3 rutas para que utilicen el mismo método de controlador:
Route::get('/{category}/Page{page}', 'ProductController@list'); Route::get('/Page{page}', 'ProductController@list'); Route::get('/{category}', 'ProductController@list');Espero que esto ayude..!
si desea obtener los parámetros en su controlador, puede usar esto:
public function list() { $params = $this->getRouter()->getCurrentRoute()->parameters(); } para /aaa/Page3 , $params sería una array(category => 'aaa', page => '3')
para /Page3 , los $params serían array(page => '3')
para /aaa , los $params serían array(category => 'aaa')