我有一些在我的代码中重复的业务逻辑。是否有标准化的方法将版本4.2分离出来?我知道在较新的版本中,Command
用于此类事情。重复逻辑的例子:
// detach tags
$card->tags()->detach();
foreach (Input::get('tags', []) as $tag)
{
// existing tag
if (is_numeric($tag) && Tag::whereId($tag)->exists())
{
$card->tags()->attach($tag);
}
// new tag
else
{
$new_tag = new Tag();
$new_tag->market()->associate($market);
$new_tag->name = $tag;
$new_tag->save();
$card->tags()->attach($new_tag->id);
}
}
我能做到这一点的最简单方法是创建一个新类,例如TagManager
并为此逻辑添加方法,例如createTag
,attachTagToCard
等。但是,我不是确定是否已经采用“预定义”方式进行此操作。
答案 0 :(得分:1)
重复的代码问题可以通过使用特征来解决。 有关特质的更多信息,请转到here
在 app / traits
文件夹中创建一个名为 TagManagerTrait.php 的文件文件内容
<?php
namespace App\Traits;
trait TagManagerTrait {
public function createTag()
{
// your create tag logic
}
public function updateTag()
{
//your update tag logic
}
}
更新您的composer.json以自动加载此
{
"autoload" : {
"classmap" : [
"app/traits"
]
}
}
在要使用重复代码的控制器中
<?php
use App\Traits\TagManagerTrait;
class XyzController extends Controller{
use TagManagerTrait;
}
现在控制器将继承该特征的所有功能并可以自由使用。