Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.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_Methods_Controller - Fatal编程技术网

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

Php Laravel:如何在控制器的几种方法中重用代码片段,php,laravel,methods,controller,Php,Laravel,Methods,Controller,我正在构建一个表单,以便创建和编辑记录 由于我使用了来自多个目录的大量关系信息(表),并在for中显示为一个选择框(Select2),因此我需要检索要在这些HTML选择标记中显示的所有数据 因此,假设在我的控制器中的create()方法中,我这样调用该信息: create()MyController.php的方法 public function create(Token $token){ //Tags $universities = University::orderB

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

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

因此,假设在我的控制器中的
create()
方法中,我这样调用该信息:

create()
MyController.php的方法

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
$universities      = University::orderBy('name')->get();
$countries         = Country::orderBy('name')->get();
$programs      = Program::orderBy('name')->get();
//... and many more

为了重用它,比如说,
edit()
方法或其他方法???

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

function __construct()
{
    $this->universities      = University::orderBy('name')->get();
    $this->countries         = Country::orderBy('name')->get();
    $this->programs      = Program::orderBy('name')->get();   
}
这将加载在每个控制器方法中声明的所有值


如果没有,您可以在应用程序文件夹中创建一个帮助器,返回所需的值。

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

function __construct()
{
    $this->universities      = University::orderBy('name')->get();
    $this->countries         = Country::orderBy('name')->get();
    $this->programs      = Program::orderBy('name')->get();   
}
这将加载在每个控制器方法中声明的所有值


如果没有,您可以在应用程序文件夹中创建一个帮助器,返回所需的值。

您可以将它们放在类中单独的方法中,该方法仅以数组形式返回数据,然后从
创建
编辑
方法调用该方法:

protected function getFormData()
{
    return [
        'universities' => University::orderBy('name')->get(),
        'countries'    => Country::orderBy('name')->get(),
        'programs'     => Program::orderBy('name')->get(),
    ];
}
然后,您的
create
edit
方法看起来像:

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

您可以将它们放在类中单独的方法中,该方法仅以数组形式返回数据,然后从
create
edit
方法调用该方法:

protected function getFormData()
{
    return [
        'universities' => University::orderBy('name')->get(),
        'countries'    => Country::orderBy('name')->get(),
        'programs'     => Program::orderBy('name')->get(),
    ];
}
然后,您的
create
edit
方法看起来像:

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 \Illuminate\Database\Eloquent\Collection
 */
protected function getUniversities() {
    return University::orderBy('name')->get();
}
然后,只需执行
$universions=$this->getuniversions()
,就可以在类的其他方法中使用它


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

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

/**
 * Tags from universities.
 * 
 * @return \Illuminate\Database\Eloquent\Collection
 */
protected function getUniversities() {
    return University::orderBy('name')->get();
}
然后,只需执行
$universions=$this->getuniversions()
,就可以在类的其他方法中使用它


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

还可以查看文档中的自动注入示例,我不建议在控制器的构造函数中执行数据库查询或其他I/O。如果您有不使用该数据的操作,他们将花费时间毫无理由地加载该数据。另外,请查看文档中的自动注入示例。我不建议在控制器的构造函数中执行数据库查询或其他I/O。如果您有不使用该数据的操作,他们将花费时间毫无理由地加载该数据。多亏了这种方法,我甚至可以将
getFormData()
方法扩展到Trait@Pathros我只建议,如果你也打算在其他控制器中使用它,就把它变成一种特性。很高兴我能帮忙!由于这种方法,我甚至可以将
getFormData()
方法扩展到Trait@Pathros我只建议,如果你也打算在其他控制器中使用它,就把它变成一种特性。很高兴我能帮忙!