Laravel:如何在控制器的几种方法中重用代码片段
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel:如何在控制器的几种方法中重用代码片段相关的知识,希望对你有一定的参考价值。
我正在构建一个表单,以便创建和编辑记录。
由于我使用了来自多个目录的大量关系信息(表格)并在for中显示为选择框(Select2),因此我需要检索要在这些html选择标记中显示的所有数据。
所以,让我们说在create()
方法的控制器中,我将这样的信息称为:
MyController.php的create()
方法:
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()
方法或其他方法?
答案
您可以将它们放在类中的单独方法中,只是将数据作为数组返回,然后从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 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:如何在控制器的几种方法中重用代码片段的主要内容,如果未能解决你的问题,请参考以下文章