Laravel - 如何在每个控制器上提供模型

时间:2016-08-24 11:43:43

标签: php laravel laravel-5

我正在开发一个laravel网站,每个网页都由两部分组成。我想一种抽象的方法是考虑一个多托管博客,格式为 {url} .blog.com / {category} (我们可以假设博客进一步划分为类别,每个帖子必须属于一个类别。

目前,我有一个路由小组为我处理 {url} {category} ,这很好,这意味着我有我的路线看起来像这样:

Route::get('/p/{post}', 'PostController@viewPost');
Route::get('/a/{author}', 'AuthorController@viewAuthor');

我的问题是,我的控制器中的每个方法都是这样的:

function viewPost(Request $request, $url, $category, $post)
function viewAuthor(Request $request, $url, $category, $author)

这意味着我需要将所有内容传递到我的视图中,如下所示:

return view('posts/viewSingle', [
    'title' => $post->title,
    'url' => $url,
    'category' => $category,
    'post' => $post
]);

我发现这里有很多重复的代码,如果我能以某种方式从我的每个控制器方法中删除 url 类别,那将会很棒并且仍然可以访问它(我想我可以在我的应用程序中使用Auth)。

问题是,这是我第一次尝试使用PHP框架,而我并没有真正摆脱最佳实践。根据我的阅读,我认为我需要两个服务提供商,但我不知道如何设置它们。

我认为我的问题更复杂,因为我需要访问Request对象以确定从数据库中获取的 url category

1 个答案:

答案 0 :(得分:2)

您正在寻找的功能称为view composer

// Using a Closure based composer
View::composer(['viewPost', 'viewAuthor'], function ($view) {
    $post = Post::find(app('request')->get('post_id'));

    $view->with('post', $post)
         ->with('category', $post->category);
});

作曲家的第一个参数是视图名称,视图名称数组或所有视图的'*'

您可以在服务提供商中注册视图作曲家。