Laravel по-русски

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

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

#1 26.07.2016 14:15:39

Как вернуть ошибку в шаблон из пользовательского класса

Здравствуйте. Можно ли каким-нибудь способом вернуть ошибку в шаблон не из контроллера, а из пользовательского класса? Что-нибудь похожее на это:

class IndexController {
    $class = new Class();
    $class->method();
}
class Class{
    public function method(){
        return back()->withErrors(['Ошибка']);
    }
}

Не в сети

#2 26.07.2016 14:17:47

Re: Как вернуть ошибку в шаблон из пользовательского класса

Что за пользовательский класс? за что он отвечает?

Не в сети

#3 26.07.2016 14:40:44

Re: Как вернуть ошибку в шаблон из пользовательского класса

Например Service Layer.

Не в сети

#4 26.07.2016 14:47:18

Re: Как вернуть ошибку в шаблон из пользовательского класса

Не надо этого делать, это не его область ответственности.
буква S в (SOLID)
https://ru.wikipedia.org/wiki/%D0%9F%D1 … 1%82%D0%B8

Сегодня это класс из контроллера дергается при http запросе, завтра он в консольной команде понадобится - в итоге  будет плодиться спагетти-код, типа доп параметров, вернуть редирект или текст ошибки и тп...

Изменено VitalN (26.07.2016 14:47:57)

Не в сети

#5 26.07.2016 14:54:18

Re: Как вернуть ошибку в шаблон из пользовательского класса

Просто некоторые контроллеры получаются излишне жирными. Я так понимаю что часть кода правильно выносить именно в Service Layer. Но там может генерироваться много ошибок, например массив нулевой длины или пустая строка. И тогда приходится все эти ошибки возвращать в контроллер и он будет состоять из кучи проверок, что тоже, наверное, неправильно.

Не в сети

#6 26.07.2016 14:56:39

Re: Как вернуть ошибку в шаблон из пользовательского класса

Смотря как организовать обработку ошибок.
Есть форм-реквесты, валидаторы…

Не в сети

#7 26.07.2016 15:05:31

Re: Как вернуть ошибку в шаблон из пользовательского класса

Ну например как-то так:

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;
    }
}

Не в сети

#8 26.07.2016 15:07:34

Re: Как вернуть ошибку в шаблон из пользовательского класса

И тогда в контроллере получается много таких проверок. Что мне совсем не нравится.

Не в сети

#9 26.07.2016 15:22:20

Re: Как вернуть ошибку в шаблон из пользовательского класса

Ну в таком виде можно и оставить, но  скорее всего что-то посложнее будет. Валидацию, как я сказал выше выносим в специально-обученные форм-реквесты и/или кастомные валидаторы.

https://laravel.com/docs/5.2/validation … approaches

Изменено VitalN (26.07.2016 15:22:36)

Не в сети

#10 26.07.2016 16:07:06

Re: Как вернуть ошибку в шаблон из пользовательского класса

Да, в некоторых контроллерах идет много подобных проверок. С учетом вызовов всех методов контроллер получается все равно очень жирным. Валидацию я делаю с помощью Реквестов. Но ведь Реквест как-то может перенаправить обратно на представление с сохранением всех ошибок. Интересно как?

Не в сети

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