php - 对保存和更新使用相同的方法是不好的做法吗?

标签 php laravel eloquent

我正在使用 laravel 但这并不重要,当您使用 laravel 命令行工具创建 Controller 时,它会在其中放置 4 个默认函数用于创建和更新。

创建存储 保存

edit and updateupdate!

这就是 laravel 对 Shop Controller 的建议。

class ShopController extends Controller
{

    public function create()
    {
       // return create view
    }

    public function store(Request $request)
    {
      // save a shop
    }

    public function edit($id)
    {
        // find a shop , return edit view
    }

    public function update(Request $request, $id)
    {
        // find the shop with id , update the shop
    }

}

但我喜欢使用相同的方法来显示 View 和存储/更新我的行,避免编写大量额外代码。

class ShopController extends Controller
{

    public function create($id  = 0)
    {
        return view('shop-create' , ['edit'=> Shop::find($id)]);
    }

    public function store(Request $request , $id = 0 )
    {
        $whitelist = [
            'title'=>'required',
            'phone'=>'present|numeric' ,
            'address'=>'present' ,
        ];
        $this->validate($request, $whitelist );
        $shop = Shop::findOrNew($id) ;
        // find a shop with given id or create a new shop instance
        foreach($whitelist as $k=>$v)
        $shop->$k = $request[$k];

        $shop->save();
     }

}

当然我会选择我喜欢的方式(第二种选择),但是由于 laravel 建议采用第一种方式,出于好奇,我有什么理由不应该这样做吗?这在任何方面都被认为是不好的做法吗?

最佳答案

没有错,但是你的代码会更难理解,恕我直言。

例如:

  • 这个方法有什么作用?叫做create,但它也可以编辑?
  • View 名为 shop-create 但它也可以编辑?
  • 传递 0 参数作为 id 的默认值并尝试每次都找到它是不必要的。

public function create($id  = 0)
{
    return view('shop-create' , ['edit'=> Shop::find($id)]);
}

尽管您认为自己在简化代码,但实际上您正在将代码变得更加复杂,因为您违反了 SOLID 中的单一职责 原则。 .

如果你有类似 Laravel 的建议,会更容易理解。

此外,您还保留了任何 Laravel 开发人员都能理解的非常通用的模式,因此您可以雇用某人来处理您的代码,而不必担心他是否理解。

关于php - 对保存和更新使用相同的方法是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671140/

相关文章:

php - 一个函数中的两个插入

php - Laravel substarction 查询不起作用

php - 从数据库中的特定表返回多行

javascript - 可以使用 php 或 javascript 在网页上呈现完整的 Latex 文件吗?

php - 期望参数

sql - Laravel Eloquent 'where' 保证顺序吗?

laravel - 使用集合在postgresql的日期字段中插入空值

php - 使用 Eloquent 从 Laravel 5 中的 Blade 运行选择查询的正确方法

php - 在 Magento 1.9 中无法向产品 View 添加其他选项卡

php - 插入重复键时,laravel Eloquent 地忽略错误