max*_*max 8 php laravel eloquent
我正在使用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
}
}
Run Code Online (Sandbox Code Playgroud)
但我喜欢使用相同的方法来显示视图并存储/更新我的行,并避免编写大量额外的代码.
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();
}
}
Run Code Online (Sandbox Code Playgroud)
当然,我选择了我喜欢的东西(第二种选择),但是由于laravel提出了第一种方式,出于好奇,我有什么理由不这样做吗?这在任何方面都被认为是不好的做法吗?
没错,但是恕我直言,您的代码将更难以理解。
例如:
create,但它也可以编辑吗?shop-create但它也可以编辑吗?0参数作为id的默认值,并且find每次都尝试输入它。public function create($id = 0)
{
return view('shop-create' , ['edit'=> Shop::find($id)]);
}
Run Code Online (Sandbox Code Playgroud)
尽管您认为自己正在简化代码,但是由于违反了SOLID的Single Responsibility原理,因此使代码变得更加复杂。
如果您有类似Laravel的建议,就更容易理解。
此外,您还保留了任何Laravel开发人员都可以理解的非常常见的模式,因此您可以雇用某人来照顾您的代码,而不用担心他是否会理解。
| 归档时间: |
|
| 查看次数: |
1702 次 |
| 最近记录: |