How can I pass variables from a middleware to a controller or a route that executes such middleware? I saw some post about appending it to the request like this:
pass key value pair like this
$route = route('routename',['id' => 1]);
or to your action
$url = action('UserController@profile', ['id' => 1]);
You can pass data the view using with
return view('demo.manage', [
'manage_link_class' => 'active',
'twilio_workspace_capability' => //how do I get the token here?...
]) -> with('token',$token);
in your middleware
public function handle($request, Closure $next)
{
$workspaceCapability = new .....
...
$request -> attributes('token' => $token);
return $next($request);
}
in your controller
return Request::get('token');
I would leverage laravel's IOC container for this.
in your AppServiceProvider's register method
$this->app->singleton(TwilioWorkspaceCapability::class, function() { return new TwilioWorkspaceCapability; });
This will mean that wherever it you DI (dependancy inject) this class in your application, the same exact instance will be injected.
In your TwilioWorkspaceCapability class:
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();
}
Then, in your route:
Route::get('/manage', ['middleware' => 'twilio.workspace.capability', function (Request $request, TwilioWorkspaceCapability $twilio) {
return view('demo.manage', [
'manage_link_class' => 'active',
'token' => $twilio->getToken(),
]);
}]);