我在我的网站上使用Laravel 4,如果用户看到弹出窗口,我想检查每个页面加载,如果没有 - 向用户显示弹出窗口。
我不想在每个控制器中执行此操作,是否可以放置代码,以便在每个页面加载之前进行检查?
答案 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()
调用的弹出窗口。