Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Здравствуйте. Можно ли каким-нибудь способом вернуть ошибку в шаблон не из контроллера, а из пользовательского класса? Что-нибудь похожее на это:
class IndexController {
$class = new Class();
$class->method();
}
class Class{
public function method(){
return back()->withErrors(['Ошибка']);
}
}
Не в сети
Не в сети
Например Service Layer.
Не в сети
Не надо этого делать, это не его область ответственности.
буква S в (SOLID)
https://ru.wikipedia.org/wiki/%D0%9F%D1 … 1%82%D0%B8
Сегодня это класс из контроллера дергается при http запросе, завтра он в консольной команде понадобится - в итоге будет плодиться спагетти-код, типа доп параметров, вернуть редирект или текст ошибки и тп...
Изменено VitalN (26.07.2016 14:47:57)
Не в сети
Просто некоторые контроллеры получаются излишне жирными. Я так понимаю что часть кода правильно выносить именно в Service Layer. Но там может генерироваться много ошибок, например массив нулевой длины или пустая строка. И тогда приходится все эти ошибки возвращать в контроллер и он будет состоять из кучи проверок, что тоже, наверное, неправильно.
Не в сети
Не в сети
Ну например как-то так:
class IndexController {
$array = [1, 2, 3];
$class = new ServiceLayer();
$newArray = $class->sortArray();
if($newArray === false){
return back()->withErrors(['Ошибка']);
}
return back()->with(compact('newArray'));
}
class ServiceLayer {
public function sortArray($array){
if(gettype($array) != 'array' || count($array) <= 0){
return false;
}
foreach($array as $item){
/*Производим действия над элементом массива*/
}
return $array;
}
}
Не в сети
И тогда в контроллере получается много таких проверок. Что мне совсем не нравится.
Не в сети
Ну в таком виде можно и оставить, но скорее всего что-то посложнее будет. Валидацию, как я сказал выше выносим в специально-обученные форм-реквесты и/или кастомные валидаторы.
https://laravel.com/docs/5.2/validation … approaches
Изменено VitalN (26.07.2016 15:22:36)
Не в сети
Да, в некоторых контроллерах идет много подобных проверок. С учетом вызовов всех методов контроллер получается все равно очень жирным. Валидацию я делаю с помощью Реквестов. Но ведь Реквест как-то может перенаправить обратно на представление с сохранением всех ошибок. Интересно как?
Не в сети