我在Laravel 5.1中有一条路由,它将接受一个通用的永久链接,并且需要确定它属于哪个对象(例如,它是"博客"还是"故事"的永久链接?
路线如下所示:
// .... Every other route in the routes.php file //
Route::get('{generic_url}', 'CMSController@generic');
然后 my 控制器中的代码如下所示:
public function generic($generic_url) {
$blog = Blog::where('permalink', $generic_url)->first();
if(!is_null($blog)) {
// Load a blog entry page
}
// Something basically the same as above but for Story
}
我的路线中也有这条路线.php文件以查看博客文章:
Route::get('/blog/{blog_id}', 'BlogController@view');
第二条路线的目的是让我粗略地查看博客文章页面,以及我调试特定帖子的快速方法。
我希望避免将视图代码放在两个单独的控制器中。我的第一个想法是尝试找到一种方法让CMSController在BlogController中调用视图操作。对我来说,这听起来是一个糟糕的主意,一些搜索证实了这是一个糟糕的主意。
我的问题是,处理这种情况的最佳方法是什么?
目前,我决定在我的博客模型中添加一个静态方法并将其放置在控制器中:
return Blog::RenderFrontendView($blog_id);
我知道这似乎有点奇怪,因为我已经在我正在使用这段代码的地方之一加载了模型,但在我正在做的事情的上下文中,这是有道理的。它在缓存中查找以检索所有信息,我打算进行进一步优化以仅加载 ID 而不是整个模型。
更新:我不再使用此方法,因为使用特征是一个更好的解决方案