每页上的Laravel检查会话

时间:2013-12-07 18:33:24

标签: laravel laravel-4

我在我的网站上使用Laravel 4,如果用户看到弹出窗口,我想检查每个页面加载,如果没有 - 向用户显示弹出窗口。

我不想在每个控制器中执行此操作,是否可以放置代码,以便在每个页面加载之前进行检查?

2 个答案:

答案 0 :(得分:4)

您可以创建一个过滤器来检查是否显示了弹出窗口。

// app/filters.php

Route::filter('popup.shown', function()
{
    // Your check logic here
});

然后,您可以在您可以扩展的路由,控制器或基本控制器中使用该过滤器来实现此功能:

class PopupController extends BaseController {

    public function __construct()
    {
        $this->beforeFilter('popup.shown');
    }

}

然后,扩展此控制器:

class MyController extends PopupController {

    public funcion getIndex()
    {
        // this will run the `popup.shown` filter 
    }

}

您可以在此处详细了解beforeFilter()


另一种方法是使用App::before()事件,因此将对每个请求进行检查。但是,我不推荐这个,因为它不灵活,你必须尽快修改它。

答案 1 :(得分:0)

我会通过视图/模板样式来解决这个问题。虽然如果您使用大量不显示此弹出窗口的模板,那么Manuel Pedrera建议的filter方法可能是最好的。

global.php或某个引导程序文件中,您可以设置自动注入的视图变量。 http://laravel.com/docs/responses#views

// Perform popup logic
View::share('showPopup', $logicResult);

然后在您想要包含此弹出窗口的各种布局中,您可以检查视图中的变量。 http://laravel.com/docs/templates

@if ($showPopup)
<div class="popup">Popup</div>
@endif

这样做的好处是您不必包含变量来显示/隐藏每个View::make()调用的弹出窗口。