Laravel:如何在控制器的几种方法中重用代码片段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel:如何在控制器的几种方法中重用代码片段相关的知识,希望对你有一定的参考价值。

我正在构建一个表单,以便创建和编辑记录。

由于我使用了来自多个目录的大量关系信息(表格)并在for中显示为选择框(Select2),因此我需要检索要在这些html选择标记中显示的所有数据。

所以,让我们说在create()方法的控制器中,我将这样的信息称为:

MyController.phpcreate()方法:

public function create(Token $token){
    //Tags
    $universities      = University::orderBy('name')->get();
    $countries         = Country::orderBy('name')->get();
    $programs      = Program::orderBy('name')->get();
    //... and many more

    return view('my.form.create',[
        'universities' =>  $universities,
        'countries'    =>  $countries,
        'programs'     =>  $programs,
        'token'        =>  $token
    ]);
}

如何重用那段代码//Tags

//Tags
$universities      = University::orderBy('name')->get();
$countries         = Country::orderBy('name')->get();
$programs      = Program::orderBy('name')->get();
//... and many more

为了重新使用它,让我们说,edit()方法或其他方法?

答案

您可以将它们放在类中的单独方法中,只是将数据作为数组返回,然后从createedit方法中调用该方法:

protected function getFormData()
{
    return [
        'universities' => University::orderBy('name')->get(),
        'countries'    => Country::orderBy('name')->get(),
        'programs'     => Program::orderBy('name')->get(),
    ];
}

然后你的createedit方法看起来像:

public function create(Token $token)
{
    $data = $this->getFormData();

    return view('my.form.create', $data);
}

public function edit(Token $token)
{
    $data = $this->getFormData();

    return view('my.form.edit', $data);
}

如果您不打算向数据阵列添加任何内容,那么您可以简单地内联调用:

return view('my.form.edit', $this->getFormData());
另一答案

您可以创建一个单独处理该部分的方法,例如:

/**
 * Tags from universities.
 * 
 * @return IlluminateDatabaseEloquentCollection
 */
protected function getUniversities() {
    return University::orderBy('name')->get();
}

然后你可以通过$universities = $this->getUniversities()在类的其他方法中使用它。

getUniversities()方法也可以存在于父类中。

另一答案

如果您将重用控制器的主要部分中的代码,我会说使用控制器的构造函数

function __construct()
{
    $this->universities      = University::orderBy('name')->get();
    $this->countries         = Country::orderBy('name')->get();
    $this->programs      = Program::orderBy('name')->get();   
}

这将加载您在每个控制器方法中声明的所有值。

如果没有,您可以在app文件夹中创建一个帮助器,返回您需要的值。

以上是关于Laravel:如何在控制器的几种方法中重用代码片段的主要内容,如果未能解决你的问题,请参考以下文章

TableViewCell的几种重用方式的区别

laravel安装的几种方法总结

CSS水平居中的9种方法

django的几种方法进行序列化(视图)

5.MVC框架开发(强类型开发,控制器向界面传递数据的几种方法)

wpf中UserControl的几种绑定方式