Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 10.08.2014 00:28:59

не работают исключения

ребят, что не так? Не работают исключения.

public function postEnter ()
   {
       $rules = ['username' => 'required|exists:users', 'password' => 'required',];
       $input = Input::only("username", "password");
       Validator::make($input, $rules);
       if (Validator::fails()) {
           throw new InvalidException('Некорректно введены данные');
       }
       $success = Auth::attempt(['user_name' => $input['username'], 'password' => $input['password']], true, true);
       if (!$success) {
           throw new InvalidException('Неверно введены данные логин/пароль');
       }

                                    return Redirect::intended();
   }

в global.php

App::error(function (InvalidException $exception) {
    Log::error($exception);
    Session::flash($exception);
       return Redirect::to('/');
});

при переходе по postEnter отображает белую страницу, хотя как бы должен исключение выбросить и вернуть на главную. что не так делаю?

Не в сети

#2 10.08.2014 09:56:08

Re: не работают исключения

А класс InvalidException у тебя есть ? Во фреймворке его нет. Попробуй кидать и ловить просто Exception.

Не в сети

#3 12.08.2014 20:55:52

Re: не работают исключения

ну я делал по документации

Однако вы можете зарегистрировать несколько обработчиков, если вам это нужно. Они будут вызываться в зависимости от типа Exception, указанного в их первом аргументе. Например, вы можете создать обработчик только для ошибок RuntimeException:

App::error(function (RuntimeException $exception) {
  // Обработка исключения...
});

Если обработчик возвращает ответ, он будет отправлен в браузер и никакие другие обработчики вызваны не будут

т.е как я понял он сам должен уловить новый тип. Или нет? И если нет, где и как создать?

Не в сети

#4 13.08.2014 08:13:21

Re: не работают исключения

  1. т.е как я понял он сам должен уловить новый тип. Или нет? И если нет, где и как создать?

Чтобы новый класс был пойман, его нужно как минимум создать — так же, как ты создаешь модели или контроллеры, создай InvalidException.php и определи его там. RuntimeException — это стандартное исключение PHP и для него ничего создавать не нужно, так что лучше пользоваться им и другими, коих довольно много

Не в сети

#5 13.08.2014 13:07:37

Re: не работают исключения

Много это понятно, но они создавались не просто так, и полюбому на чем то завязаны, и не хотелось бы, чтобы пользователю, вдруг вывалилось то, чего ему совсем знать не стоит)

сделал так в controllers/

<?php

use Illuminate\Exception;

class InvalidException extends \Exception {}

в global.php оставил как есть, и уже при вызове throw new InvalidException('тут косяк'); он все ловит.

Спасибо!

Изменено MrRino (13.08.2014 13:08:30)

Не в сети

#6 13.08.2014 17:16:31

Re: не работают исключения

  1. Много это понятно, но они создавались не просто так, и полюбому на чем то завязаны

Это верно, но название «InvalidException» тоже очень общее — если это исключение-ошибка запроса, то тогда и назвать его надо как-нибудь вроде «RequestException» или «InputException». Или просто использовать App::abort(400, 'Сообщение') и ловить/отображать его затем в App::error(function ($e) { ... }).

Не в сети

#7 13.08.2014 17:40:34

Re: не работают исключения

Тоже верно, учту!

Не в сети

Подвал раздела