retornar - rutas con parametros laravel
Laravel-Pasar variables de Middleware a controlador/ruta (2)
¿Cómo puedo pasar variables de un middleware a un controlador o una ruta que ejecuta dicho middleware? Vi una publicación sobre agregarlo a la solicitud de esta manera:
$request->attributes->add([''key'' => $value);
También otros sugeridos usando flash:
Session::flash(''key'', $value);
pero no estoy seguro si esa es la mejor práctica, o si hay una mejor manera de hacer esto? Aquí está mi Middleware y ruta:
namespace App/Http/Middleware;
use Closure;
class TwilioWorkspaceCapability
{
/**
* Handle an incoming request.
*
* @param /Illuminate/Http/Request $request
* @param /Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$workspaceCapability = new /Services_Twilio_TaskRouter_Workspace_Capability("xxxxx", "xxxx", "xxxx");
$workspaceCapability->allowFetchSubresources();
$workspaceCapability->allowDeleteSubresources();
$workspaceCapability->allowUpdatesSubresources();
$token = $workspaceCapability->generateToken();
//how do I pass variable $token back to the route that called this middleware
return $next($request);
}
}
Route::get(''/manage'', [''middleware'' => ''twilio.workspace.capability'', function (Request $request) {
return view(''demo.manage'', [
''manage_link_class'' => ''active'',
''twilio_workspace_capability'' => //how do I get the token here?...
]);
}]);
FYI el motivo por el que decidí utilizar un middleware para esto es porque planeo guardar en caché el token para su ciclo de vida, de lo contrario, sería una implementación horrible, ya que solicitaría un token nuevo en cada solicitud.
Me gustaría aprovechar el contenedor IOC de laravel para esto.
en el método de registro de AppServiceProvider
$this->app->singleton(TwilioWorkspaceCapability::class, function() { return new TwilioWorkspaceCapability; });
Esto significará que, donde sea que usted DI (dependencia inyecte) esta clase en su aplicación, se inyectará la misma instancia exacta.
En tu clase TwilioWorkspaceCapability:
class TwilioWorkspaceCapability {
/**
* The twillio token
* @var string
*/
protected $token;
/**
* Get the current twilio token
* @return string
*/
public function getToken() {
return $this->token;
}
... and finally, in your handle method, replace the $token = ... line with:
$this->token = $workspaceCapability->generateToken();
}
Luego, en tu ruta:
Route::get(''/manage'', [''middleware'' => ''twilio.workspace.capability'', function (Request $request, TwilioWorkspaceCapability $twilio) {
return view(''demo.manage'', [
''manage_link_class'' => ''active'',
''token'' => $twilio->getToken(),
]);
}]);
pasar el par de valores clave como este
$route = route(''routename'',[''id'' => 1]);
o a tu acción
$url = action(''UserController@profile'', [''id'' => 1]);
Puede pasar datos de la vista usando con
return view(''demo.manage'', [
''manage_link_class'' => ''active'',
''twilio_workspace_capability'' => //how do I get the token here?...
]) -> with(''token'',$token);
en tu middleware
public function handle($request, Closure $next)
{
$workspaceCapability = new .....
...
$request -> attributes(''token'' => $token);
return $next($request);
}
en tu controlador
return Request::get(''token'');