3
我在Laravel 4項目中使用存儲庫模式,但遇到了一些我認爲我做得不正確的事情。Laravel 4 - 在未返回被調用方法時從存儲庫重定向
在保存新用戶之前,我正在進行用戶驗證。
我在我的控制器的一個方法是:
public function addNewUser() {
$validation = $this->userCreator->validateUser($input);
if ($validation['success'] === false)
{
return Redirect::back()
->withErrors($validation['errors'])
->withInput($input);
}
return $this->userCreator->saveUser($input);
}
那麼的ValidateUser方法是:
public function validate($input) {
$rules = array(
'first_name' => 'required',
'last_name' => 'required',
'email_address' => 'unique:users'
);
$messages = [
];
$validation = Validator::make($input, $rules, $messages);
if ($validation->fails())
{
$failed = $validation->messages();
$response = ['success' => false, 'errors' => $failed];
return $response;
}
$response = ['success' => true];
return $response;
}
這可能是好的,但我不喜歡在我的控制器做if語句?我寧願能夠在我的驗證類中處理這個問題。
但是爲了能夠從驗證類重定向,我需要返回控制器中的方法。
如果我然後想要5個方法調用,我不能全部歸還它們?
我想能夠簡單地按順序調用方法,然後在它們各自的類中處理我需要的內容,以及是否有任何錯誤重定向或處理它們。但如果一切正常,只需忽略它並轉到下一個功能。
所以例如:
public function addNewUser()
{
$this->userCreator->validateUser($input);
$this->userCreator->formatInput($input);
$this->userCreator->sendEmails($input);
return $this->userCreator->saveUser($input);
}
如果做在控制器聲明並不像我想那我可以繼續糟糕,但是這似乎不正確的?
如果在控制器中使用thens,並且我一直這樣做,因爲控制器是存儲應用程序邏輯的地方,所以我沒有發現任何問題。我可能會將所有validateUser,formatInput和saveUser函數放入用戶控制器中稱爲store的單個函數中。然而,我將爲您從商店功能調用的sendEmails創建一個單獨的類。 – Joshua
@Joshua控制器不應該在你的應用程序邏輯存儲的地方,它應該在服務中。 – ibanore
@Joshua,控制器不需要知道實際的邏輯,它只是一個傳輸器。 – CodeRomeos