在Laravel 4中使用命名空间类作为View Composer?

时间:2015-05-29 08:23:57

标签: php laravel laravel-4 namespaces

我有一个简单的设置,我需要在我的网站标题中的应用程序中普遍显示一些数据。为此,我创建了一个ComposerServiceProvider类和一个HeaderComposer类来委派此职责,如下所示:

ComposerServiceProvider

use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {
    public function register() {
        $this->app->view->composer('templates.header', 'HeaderComposer');
    }
}

HeaderComposer

class HeaderComposer {
    public function compose($view) {

        Event::listen('illuminate.query', function($q) {
            print_r($q);
        });

        $view->with('nearbyMissions', array(
            'past' => Mission::remember(60, 'previousMissions')->previousMissions(3)->get(),
            'future' => Mission::remember(60, 'nextMissions')->nextMissions(3)->get()
        ));
    }
}

以前,这些类没有命名空间,但我现在决定将每个类命名为一个好的做法,方法是在文件前加上:

namespace MyProject\Composers;

然而,由于我的项目的某些部分无法再解析我的作曲家类,这已经破坏了我的应用程序。我的所有页面都不起作用,因为它们都使用模板化的标题视图,该视图使用我的HeaderComposer

Class HeaderComposer does not exist (View: H:\myproject\app\views\templates\main.blade.php)

我想在哪里为我的班级宣布use陈述?在我看来? (这似乎并不正确)。在其他地方?

1 个答案:

答案 0 :(得分:1)

由于您只是为您的类命名,因此您必须更新您的作曲家绑定:

use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider {

    public function register() {
        $this->app->view->composer('templates.header', 'MyProject\Composers\HeaderComposer');
    }

}