【发布时间】:2015-03-25 19:59:38
【问题描述】:
这是我的服务提供商代码:
<?php namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Event;
class LayoutVarsServiceProvider extends ServiceProvider {
public function register()
{
}
public function boot()
{
$route = Route::currentRouteAction();
$parts = explode("@" , $route);
Event::listen('Illuminate\Events\Dispatcher', function($event)
{
if($parts[0] = 'IndexController'){
switch($parts[1]) {
case 'getIndex':
$this->app->layout->container_class = 'homepage';
break;
case 'getHowworks':
$this->app->layout->container_class = 'how-does-it-work';
}
}
});
}
}
我希望能够使用 Laravel Event Dispatch 获取加载到我的服务提供者中的当前控制器或当前布局我能够从 Laravel Face Route 获取控制器名称和动作名称。但是如何访问布局? 我已经知道所有服务提供者都扩展了服务提供者,并且服务提供者类有一个名为 app 的属性,这样我们就可以访问 laravel IOC。
解决了。
毕竟我的问题已经解决了,但我不知道如何访问已调度的控制器实例。 并且因为我已经阅读了容器和控制器以及服务提供商源代码,所以这是不可能的。也许我应该自己扩展 laravel 容器。
【问题讨论】:
-
您能否提供一些背景信息,说明您为什么要这样做,因为可能有更简单的选择?我以前在 symfony2 中做过这个,但看起来你没有很多生命周期中的事件可以在 Laravel 中使用来获取控制器 laravel.com/docs/4.2/lifecycle#application-events
-
我的项目中有这么多页面,我的布局有一个带有容器 id 的 div,并且在每个页面中它都有特定的类,例如在联系页面中是这样的:“" 我认为在所有控制器上的每个操作中传递这些类名并不是一件好事我想要一个开关盒来在路由和控制器上设置容器类被调度的动作。
-
基本上,如果我是你,我会在你的视图中创建一个辅助函数来查找配置文件中的控制器/动作,获取值并应用 CSS 类。它仍然看起来很狡猾,但你原来的想法是一个糟糕的方式去
-
可以解释更多并将您的想法写成答案,因为我认为这是一个好主意,但我有点困惑该怎么做,如果我明白你的意思并且我解决了我的问题,请标记你的答案作为接受的答案。谢谢
标签: php laravel layout service laravel-4