Я создаю сценарий установки для приложения Laravel, и я пытаюсь создать учетную запись администратора как один из шагов установки. Когда возникает ошибка, приложение должно перенаправить обратно на ту же страницу с предупреждающим сообщением, но Laravel показывает сообщение об ошибке и останавливает приложение:
public function postAdmin() {
$validation_rules = array(
'username' => 'required|min:4|alpha_dash|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required|min:4',
);
$validator = Validator::make(Input::all(), $validation_rules);
if ($validator->fails()) {
return Redirect::to('install/admin')
->withInput()
->withErrors($validator);
}
else {
try {
$username = Input::get('username');
$email = Input::get('email');
$password = Hash::make(Input::get('password'));
$admin_user = new User;
$admin_user->username = $username;
$admin_user->email = $email;
$admin_user->password = $password;
$admin_user->admin = 1;
$user_data_saved = $admin_user->save();
if ($user_data_saved) {
Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password')));
return Redirect::to('install/finish')->with('success', "Admin account created");
}
else {
return Redirect::to('install/admin')
->with('error', 'Error adding admin info');
}
}
catch(Exception $e) {
return Redirect::to('install/admin')->with('error', "Error creating admin account");
}
}}
Можно ли проверять ошибки с помощью try/catch и перенаправлять, если возникает ошибка и как?
Laravel ловит некоторые ошибки, поэтому, чтобы иметь возможность обрабатывать их самостоятельно, вам нужно отредактировать app/Exceptions/Handler.php
и, возможно, использовать метод render для обработки своих собственных исключений:
public function render($request, Exception $e)
{
if ($result = MyExceptionHandler::handle($e))
{
return $result;
}
return parent::render($request, $e);
}
Реструктуризация try/catch решила проблему на данный момент:
public function postAdmin() {
try {
$validation_rules = array(
'username' => 'required|min:4|alpha_dash|unique:users',
'email' => 'required|email|unique:users',
'password' => 'required|min:4',
);
$validator = Validator::make(Input::all(), $validation_rules);
if ($validator->fails()) {
return Redirect::to('install/admin')
->withInput()
->withErrors($validator);
}
else {
$username = Input::get('username');
$email = Input::get('email');
$password = Hash::make(Input::get('password'));
$admin_user = new User;
$admin_user->username = $username;
$admin_user->email = $email;
$admin_user->password = $password;
$admin_user->admin = 1;
$user_data_saved = $admin_user->save();
if ($user_data_saved) {
Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password')));
return Redirect::to('install/finish')->with('success', "Admin account created");
}
else {
return Redirect::to('install/admin')
->with('error', 'Error adding admin info');
}
}
}
catch(Exception $e) {
return Redirect::to('install/admin')->with('error', "Error creating admin account");
}
}