Поймать исключение и перенаправить

0

Я создаю сценарий установки для приложения 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 и перенаправлять, если возникает ошибка и как?

Теги:

2 ответа

1

Laravel ловит некоторые ошибки, поэтому, чтобы иметь возможность обрабатывать их самостоятельно, вам нужно отредактировать app/Exceptions/Handler.php и, возможно, использовать метод render для обработки своих собственных исключений:

public function render($request, Exception $e)
{
    if ($result = MyExceptionHandler::handle($e))
    {
        return $result;
    }

    return parent::render($request, $e);
}
0

Реструктуризация 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");
} 
 }
  • 0
    Преднамеренно сделанная ошибка - неправильные данные для входа в базу данных базы данных для database.php. Использование валидатора без кода базы данных в приведенном выше примере также приводило к ошибке, поэтому весь код был помещен в часть try {} блока try / catch

Ещё вопросы

Сообщество Overcoder
Наверх
Меню