如何将过滤器中处理的变量传递回路由以供以后使用?
示例:
过滤器:
Route::filter('myfilter', function()
{
return "some data";
});
路线:
Route::get('/mypage', array('before'=>'myfilter', function($filter) {
if($filter!= 'admin') {
return Redirect::to('home');
}
}));
以上示例不起作用。我怎样才能使它有效?
谢谢。
答案 0 :(得分:1)
警告:没有正在努力工作!
将其存储在IoC容器中:http://laravel-recipes.com/recipes/3
过滤器:
Route::filter('myfilter', function()
{
App::instance('app.name', 'John Doe'); // store var
});
路线:
Route::get('/mypage', array('before'=>'myfilter', function() {
$name = app('app.name'); // read var
return $name;
}));
答案 1 :(得分:0)
你做不到。如果您从过滤器返回任何内容,Laravel会将该过滤器返回到您的浏览器并结束您的请求。
您可以做的是重定向到路线并将值传递到该路线:
Route::filter('myfilter', function()
{
return Redirect::to('mynewpage')->with('var', 'some data');
});
此数据将在会话中返回:
$data = Session::get('var');
答案 2 :(得分:0)
您可以通过以下任何方式传递数据:
Session::put()
和Session::get()
(由于磁盘写入速度慢)Config::set()
和Config::set()
通过define()
(建议用于您的目的)设置和获取$_GLOBALS[]
数组的全局变量(不推荐)答案 3 :(得分:0)
最近在旧的Laravel 4.2项目&用控制器方法作为Controller Filter:
来解决这个问题namespace App\Controllers;
Class MyController extends BaseController
{
protected $filterValue;
public function __construct()
{
$this->beforeFilter('@myFilter', array(
'only' => 'myPage'
));
}
public function myFilter($route, $request)
{
$this->filterValue = 'some data';
}
public function myPage()
{
if ($this->filterValue != 'admin') {
return Redirect::to('home');
}
}
}