Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
ребят, что не так? Не работают исключения.
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 отображает белую страницу, хотя как бы должен исключение выбросить и вернуть на главную. что не так делаю?
Не в сети
А класс InvalidException у тебя есть ? Во фреймворке его нет. Попробуй кидать и ловить просто Exception.
Не в сети
ну я делал по документации
Однако вы можете зарегистрировать несколько обработчиков, если вам это нужно. Они будут вызываться в зависимости от типа Exception, указанного в их первом аргументе. Например, вы можете создать обработчик только для ошибок RuntimeException:
App::error(function (RuntimeException $exception) { // Обработка исключения... });
Если обработчик возвращает ответ, он будет отправлен в браузер и никакие другие обработчики вызваны не будут
т.е как я понял он сам должен уловить новый тип. Или нет? И если нет, где и как создать?
Не в сети
- т.е как я понял он сам должен уловить новый тип. Или нет? И если нет, где и как создать?
Чтобы новый класс был пойман, его нужно как минимум создать — так же, как ты создаешь модели или контроллеры, создай InvalidException.php и определи его там. RuntimeException — это стандартное исключение PHP и для него ничего создавать не нужно, так что лучше пользоваться им и другими, коих довольно много
Не в сети
Много это понятно, но они создавались не просто так, и полюбому на чем то завязаны, и не хотелось бы, чтобы пользователю, вдруг вывалилось то, чего ему совсем знать не стоит)
сделал так в controllers/
<?php
use Illuminate\Exception;
class InvalidException extends \Exception {}
в global.php оставил как есть, и уже при вызове throw new InvalidException('тут косяк'); он все ловит.
Спасибо!
Изменено MrRino (13.08.2014 13:08:30)
Не в сети
- Много это понятно, но они создавались не просто так, и полюбому на чем то завязаны
Это верно, но название «InvalidException» тоже очень общее — если это исключение-ошибка запроса, то тогда и назвать его надо как-нибудь вроде «RequestException» или «InputException». Или просто использовать App::abort(400, 'Сообщение') и ловить/отображать его затем в App::error(function ($e) { ... }).
Не в сети
Тоже верно, учту!
Не в сети
Страницы 1