避免在Laravel 5.1中的两个控制器中重复代码

时间:2016-01-28 20:26:17

标签: php laravel-5.1 laravel-routing

我在Laravel 5.1中有一条路线可以接受通用固定链接,并且需要确定它属于哪个对象(例如它是"博客"或者"故事&的永久链接#34;。)

路线如下:

// .... Every other route in the routes.php file //
Route::get('{generic_url}', 'CMSController@generic');

然后我的控制器中的代码如下所示:

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
}

我在routes.php文件中也有这条路线来查看博客文章:

Route::get('/blog/{blog_id}', 'BlogController@view');

第二条路线的目的对我来说是一个粗略的博客帖子页面以及我调试特定帖子的快捷方式。

我希望避免将视图代码放在两个独立的控制器中。我的第一个想法是尝试找到让CMSController在BlogController中调用视图动作的方法。这听起来像是一个糟糕的主意,一些搜索确认这是一个糟糕的主意。

我的问题是,处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

暂时我决定在我的Blog模型中添加静态方法并将其放在控制器中:

return Blog::RenderFrontendView($blog_id);

我知道这似乎有点奇怪,因为我已经将模型加载到我使用此代码的其中一个位置,但在我正在做的事情的上下文中这是有意义的。它在缓存中查找以检索所有信息,我打算进一步优化以仅加载ID而不是整个模型。

更新:我不再使用此方法,因为使用特征是一个更好的解决方案