Php Laravel控制器-在另一个函数中调用函数
从Laravel控制器中删除重复代码的最佳方法是什么?在我的特殊情况下,我有博客控制器,其中每个子页面都有多个功能(索引页面、关于、联系人、单个帖子页面…)。在这些函数中,我有一些重复的代码。我可以创建一个特殊的函数,然后调用其中任何一个函数吗Php Laravel控制器-在另一个函数中调用函数,php,laravel,Php,Laravel,从Laravel控制器中删除重复代码的最佳方法是什么?在我的特殊情况下,我有博客控制器,其中每个子页面都有多个功能(索引页面、关于、联系人、单个帖子页面…)。在这些函数中,我有一些重复的代码。我可以创建一个特殊的函数,然后调用其中任何一个函数吗 class BlogController extends Controller { public function getIndex() { $blogs = Blog::orderBy('id', 'desc')->wh
class BlogController extends Controller {
public function getIndex() {
$blogs = Blog::orderBy('id', 'desc')->where('status', '1')->paginate(3);
return view('index-page')->withBlogs($blogs);
}
public function getAbout() {
$blogs = Blog::orderBy('id', 'desc')->where('status', '1')->paginate(3);
return view('about-page')->withBlogs($blogs);
}
}
现在,我想通过创建一个特殊函数来删除重复代码(我的代码只是一个示例,真正的重复代码要长得多)。这可能吗?除了创建另一个函数,还有其他方法吗?也许我可以在Wordpress中创建类似function.php的东西?您可以在控制器文件中创建另一个函数并调用它:
private function foo($view)
{
$blogs = Blog::orderBy('id', 'desc')->where('status', '1')->paginate(3);
return view($view)->withBlogs($blogs);
}
然后称之为:
public function getIndex() {
return $this->foo('index-page');
}
public function getAbout() {
return $this->foo('about-page');
}
NameOfClass::foo();
如果您想创建一个可以在任何地方调用的函数,您可以在类中创建一个static
函数。例:
public static function foo()
{
return "foo";
}
然后称之为:
public function getIndex() {
return $this->foo('index-page');
}
public function getAbout() {
return $this->foo('about-page');
}
NameOfClass::foo();
您应该按照以下方式获取数据:
public function getIndex()
{
return view('index-page', ['blogs' => $this->blog->paginateLatest()]);
}
在博客
模型中:
public function paginateLatest()
{
return $this->latest('id')->where('status', 1)->paginate(3);
}
您还可以选择将某些信息移动到管线定义中
class SomeController ...
{
public function showPage(Request $request)
{
return view(
$request->route()->getAction('view'),
['blogs' => Blog::orderBy('id', 'desc')->where('status', '1')->paginate(3)]
);
}
}
Route::get('about', ['uses' => 'SomeController@showPage', 'view' => 'about-page']);
Route::get('contact', ['uses' => 'SomeController@showPage', 'view' => 'contact-page']);
只是加入一个“可以”完成的附加选项
如果您有需要这些博客文章的分部,可以通过删除查询并将其移动到视图生成器中来简化此方法:
public function showPage(Request $request)
{
return view($request->route()->getAction('view'));
}
View::composer('some.partial.that.needs.those.blog.posts', function ($view) {
$view->with(
'blogs',
Blog::orderBy('id', 'desc')->where('status', '1')->paginate(3)
);
});
顺便问一下,这些“博客”像是一个在边栏或页脚中使用的帖子列表吗?侧边栏/页脚是它自己的部分吗?