所以基本上我有一个关于如何以最好的方式做到这一点的问题。而且我甚至不确定我是否正确地做到了这一点。
我有一个设置页面,用户可以在其中更新某些设置。提交表单后,您可以看到以下方法正在处理请求。
我确实有Profile
模型以及User
模型,他们的关系也设置正确。
但正如您所看到的,一切都是在此方法的控制器中完成的。我根本不使用Profile
模型。但不应该吗?
我可以在Profile
模型中制作和使用哪种方法,以便在控制器中做得更少?
很抱歉,如果这是一个不合适的问题。
提前致谢。
/**
* @return mixed
*
* Process general settings
*/
public function postEditGeneralSettings() {
// Validate
$val = Validator::make([
'show_age' => Input::get('show_age'),
'show_gender' => Input::get('show_gender')
], [
'show_age' => 'sometimes|boolean',
'show_gender' => 'sometimes|boolean'
]);
if ($val -> fails()) {
return $this -> backWithErrors($val);
}
// Update
Auth::user() -> profile() -> update([
'show_age' => Input::get('show_age'),
'show_gender' => Input::get('show_gender')
]);
return $this -> backWithSuccess('Innstillingene ble lagret!');
}
答案 0 :(得分:2)
您可以使用Repository类来推卸从控制器存储数据的责任:
T
然后使用控制器中的存储库:
class UserRepository
{
//rules for validation, as an alternative you can put them in your User Model
public static $rules = [
'title' => 'required|unique|max:255',
'body' => 'required',
];
public function updateUserProfile($user, $data)
{
$user->profile()->update([
'show_age' => $data('show_age'),
'show_gender' => $data('show_gender')
]);
}
答案 1 :(得分:1)
正如马可所说,这里没有错。
您还可以使用默认的validate
方法调用进行验证,而不需要创建特定的表单请求。通常,如果验证变得复杂,我会到达特定的表单请求类,否则内联是完美的。 validate
函数有什么好处,它会抛出一个被捕获的验证异常,并重定向回错误集等。
使用Eloquent也不是问题,拥抱活跃的记录模式。如果您想更明确一点,可以按如下方式包装更新。
public function postEditGeneralSettings(Request $request)
{
$this->validate($request, [
'show_age' => 'sometimes|boolean',
'show_gender' => 'sometimes|boolean',
]);
auth()->user()->updateProfile([
'show_age' => $request->input('show_age'),
'show_gender' => $request->input('show_gender'),
]);
return $this->backWithSuccess('Innstillingene ble lagret!');
}
class User extends Model
{
...
public function updateProfile($settings)
{
$this->profile()->update($settings);
}
}