Laravel 4将数据从过滤器传递到路由

时间:2014-01-08 08:53:21

标签: php laravel-4

如何将过滤器中处理的变量传递回路由以供以后使用?

示例:

过滤器:

Route::filter('myfilter', function()
{
    return "some data";
});

路线:

Route::get('/mypage', array('before'=>'myfilter', function($filter) {
    if($filter!= 'admin') {
        return Redirect::to('home');
    }
}));

以上示例不起作用。我怎样才能使它有效?

谢谢。

4 个答案:

答案 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()通过
  • 定义PHP常量
  • 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');
        }
    }
}