Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel控制器-在另一个函数中调用函数_Php_Laravel - Fatal编程技术网

Php Laravel控制器-在另一个函数中调用函数

Php Laravel控制器-在另一个函数中调用函数,php,laravel,Php,Laravel,从Laravel控制器中删除重复代码的最佳方法是什么?在我的特殊情况下,我有博客控制器,其中每个子页面都有多个功能(索引页面、关于、联系人、单个帖子页面…)。在这些函数中,我有一些重复的代码。我可以创建一个特殊的函数,然后调用其中任何一个函数吗 class BlogController extends Controller { public function getIndex() { $blogs = Blog::orderBy('id', 'desc')->wh

从Laravel控制器中删除重复代码的最佳方法是什么?在我的特殊情况下,我有博客控制器,其中每个子页面都有多个功能(索引页面、关于、联系人、单个帖子页面…)。在这些函数中,我有一些重复的代码。我可以创建一个特殊的函数,然后调用其中任何一个函数吗

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)
    );
});

顺便问一下,这些“博客”像是一个在边栏或页脚中使用的帖子列表吗?侧边栏/页脚是它自己的部分吗?