【发布时间】:2019-10-04 15:18:49
【问题描述】:
我使用的是 laravel,但这并不重要,当您使用 laravel 命令行工具创建控制器时,它会在其中放置 4 个默认函数用于创建和更新。
create 和 store 对应 save
edit 和 update update!
这是 laravel 对 Shop 控制器的建议。
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
}
}
但我喜欢使用相同的方法来显示视图和存储/更新我的行,避免编写大量额外代码。
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 建议第一种方式,出于好奇,我有什么理由不这样做吗?这在任何方面都被认为是不好的做法吗?
【问题讨论】:
-
显示你的视图源代码。
-
最好不要违背框架的约定,以后可能会混淆你和其他人。拥抱 Laravel 的做事方式,您将获得更容易遵循的文档,并且更容易利用框架功能。