我有这样的用户路线:
用户/ 13 /文章/ 10
用户/ 13 /视频/ 443
user / 13 / items / 4002
我想在每次加载帖子/视频/项目视图时提取与“user / 13”相关的所有数据。 我还加载侧边栏@include('inc / blog-sidebar'),此文件包含所有视图中相同且与'user / 13'相关的数据。
如果不在每个控制器中按功能执行此操作,那么获取所有这些信息的最佳方法是什么?
我已经尝试过了:routes.php中的composer(这是坏的),我无法获取用户ID并获取相关信息。
View::composer('posts.show', function($view)
{
$author = User::find(1);
$view->with('author',$author);
});
另外,如果这是最佳解决方案,那么我应该在哪里存储我的视图编辑器?
谢谢!
答案 0 :(得分:1)
首先为URI
或user/13
这样的任何user/15
创建一个路由模式(在routes.php
文件中):
// Composers will be used only for this url pattern, i.e. "user/13" or "user/15"
Route::when('user/*', 'prepareView');
然后像这样创建prepareView
过滤器:
Route::filter('prepareView', function($route, $request) {
// Register your three view composers
View::composers(array(
// Call the "postsViewComposer" method from
// ViewComposers for "posts.show" view
'ViewComposers@postsViewComposer' => 'posts.show',
// Call the "videsViewComposer" method from
// ViewComposers for "videos.show" view
'ViewComposers@videsViewComposer' => 'videos.show',
// Call the "itemsViewComposer" method from
// ViewComposers for "items.show" view
'ViewComposers@itemsViewComposer' => 'items.show',
));
});
然后在ViewComposers
文件夹中创建app/viewcomposers
类:
class ViewComposers {
public function postsViewComposer($view)
{
// Get user id, for example, 15
$id = Route::current()->parameter('id');
// Then use it to retrieve the model
$author = User::find($id);
return $view->with('author', $author);
}
public function videsViewComposer($view)
{
// Logic for this view composer
}
public function itemsViewComposer($view)
{
// Logic for this view composer
}
}
最后,您需要在class
的{{1}}文件中添加新的composer.json
,例如:
autoload->classmap
最后,只需从项目的根目录中运行"autoload": {
"classmap": [
"app/commands",
"app/controllers",
// ...
"app/viewcomposers"
]
中的composer dump-autoload
即可。就是这样。现在,只要请求任何command prompt/terminal
用户的URI
,就会运行id
来准备视图。
答案 1 :(得分:0)