Al intentar acceder a los parámetros de la ruta, usando $request->route('id'), en la última versión de Lumen, recibo un error.

lumen.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: 
Call to a member function parameter() on array

Funciona bien en Laravel.

4
Zoon 21 ene. 2018 a las 20:31

3 respuestas

La mejor respuesta

Lumen está tan despojado que la Ruta se resuelve en una matriz simple, en lugar de un objeto Ruta.

Esto es un problema, ya que el método Request::route($key) supone que la ruta tendrá un método parameter.

Pero si llama a Request::route(null), se devolverá la matriz de ruta completa, con un aspecto similar a este:

array(3) {
  [0]=>
  int(1)
  [1]=>
  array(2) {
    ["uses"]=>
    string(40) "App\Http\Controllers\SomeController@index"
    ["middleware"]=>
    array(2) {
      [0]=>
      string(4) "auth"
      [1]=>
      string(4) "example"
    }
  }
  [2]=>
  array(1) {
    ["id"]=>
    string(36) "32bd15fe-fec8-11e7-ac6b-e0accb7a6476"
  }
}

Donde [2] siempre parece contener los parámetros de Ruta.

Hice una clase de ayuda simple para trabajar con los parámetros de Ruta en Lumen. Puede obtener, establecer y olvidar los parámetros de ruta. Esto funciona muy bien si necesita manipularlos en su middleware.

Guardar en app/Support/RouteParam.php: https://gist.github.com/westphalen/c3cd187007e0448bcb7fca1de0>

Y simplemente utilízalo así: $id = RouteParam::get($request, 'id');

Culpa illuminate/http/Request.php:

/**
 * Get the route handling the request.
 *
 * @param  string|null  $param
 *
 * @return \Illuminate\Routing\Route|object|string
 */
public function route($param = null)
{
    $route = call_user_func($this->getRouteResolver());

    if (is_null($route) || is_null($param)) {
        return $route;
    }

    return $route->parameter($param); // can't call parameter on array.
}
10
Zoon 21 ene. 2018 a las 17:31

No estoy seguro de dónde está intentando acceder a esto, pero si es desde el controlador, la documentación de Lumen explica que se accede al escribirlo en el método: https://lumen.laravel.com/docs/master/requests#accessing-the-request

De la documentación:

Todavía puede escribir la sugerencia Illuminate \ Http \ Request y acceder a su ID de parámetro de ruta definiendo su método de controlador de la siguiente manera:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Update the specified user.
     *
     * @param  Request  $request
     * @param  string  $id
     * @return Response
     */
    public function update(Request $request, $id)
    {
        //
    }
}
-1
LordZardeck 23 ago. 2019 a las 20:49

Para obtener parámetros de solicitud en Lumen, no importa cuál sea el verbo HTTP:

$name = $request->input('name');

https://lumen.laravel.com/docs/master/requests#retrieving-input

0
AMS777 1 mar. 2018 a las 16:14
48369687