我正在开发Laravel Web App,我需要在重构Controller方面有见识。
我注意到我的Controller store()和update()方法非常相似。如此相似,仅更改的行如下:
在store()方法中,我使用$deck = new Deck();
;在update()方法中,我使用$deck = Deck::find($id);
。在Controller内部的这140行中,这些是唯一更改的行。
如何重构该代码或将其提取到哪里?我的第一个想法是创建一个Trait并将方法放到那里,但这似乎不正确,或者是吗?
答案 0 :(得分:1)
如果要将应用程序逻辑保留在控制器中,可以对重复的代码创建一个函数,然后在参数中传递Deck对象。
public function store()
{
$deck = new Deck();
$this->save($deck);
}
public function update()
{
Deck::find($id);
$this->save($deck);
}
private function save(Deck $deck)
{
// Duplicate Code goes here
}
希望我能帮上忙
答案 1 :(得分:0)
我不建议同时使用两种方法,但是不知道您的用例,可以使用firstOrNew
帮助方法,如果给定的ID存在Deck
,它将返回Deck::firstOrNew(['id' => $id]);
否则它将为您创建一个新实例。所以用这个:
<div class="container">
<h4 class="publish-work" >PUBLISHED WORKS AVAILABLE</h4>
<br>
<input type="search" class="search" name="search" >
<br>
<br>
<table id="datalist" class="table table-bordered" style="height: 400px; overflow-y: auto;">
<thead>
<th>S.no</th>
<th>Name</th>
<th>Price</th>
</thead>
<tbody>
</tbody>
</table>
答案 2 :(得分:0)
我的建议是保持简单。我将使用重复的代码创建一个私有函数,然后从store()和update()函数中调用它。