我正在使用 laravel 但这并不重要,当您使用 laravel 命令行工具创建 Controller 时,它会在其中放置 4 个默认函数用于创建和更新。
创建
和存储
保存
edit
and update
井 update
!
这就是 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/