besogonskiy
@besogonskiy
работаю php laravel разработчиком.

Как в Laravel правильнее инициализировать класс чтоб его методы и переменные были доступны везде?

Создали класс, в котором есть массив - это список кодов ошибок и сообщений а так же метод, который по коду ошибки выдает соощение и возвращает это в виде
return response()->json(
.......
);

и как бы лучше сделать чтобы можно во всех контроллерах вызывать эту строку типа
return $this->responser->getReturnData($ErrorCode);

Можно в каждом контроллере переопределить конструктор и там заводить объект класса при помощи нью

$this->responser = new RectonderClass;

а потом в каждом методе обращаться к объекту класса и его методу. Но есть же более правильные методы?
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ответы на вопрос 2
@jazzus
Внезапно пришла абсурдная идея (она автору не понравится), что
return response()->json(trans('errors.500'), 500);
итак прекрасно работает
Ответ написан
@kandrash
Кратко о себе
Вы можете, например, сделать это в конструкторе файла app/Http/Controllers/Controller.php

class Controller extends BaseController
{
    protected Responser $responser;

    public function __construct(Responser $responser)
    {
        $this->responser = $responser;
    }
}


НО ИМХО то что вы пытаетесь сделать полная фигня. Статусы HTTP которые вы пытаетесь переопределить и переописать уже придуманы и описаны.
'NOUSERID' => ['e...' 200????
// Лававел автоматически вернёт статус 422 и все ошибки валидации
// Вместо этого вы ловите эксепшн валидации и вручную выбираете только первую ошибку?

'SERVER_STATUS_401'...503 
// Без комментариев. Вы опять вручную ловите например ошибку 401 и возвращаете её со статусом 200?
// А на клиенте не понимаете что нужно показать форму входа, ведь статус 200 а сравнивать
// if (error === 'Вы не авторизованы или сессия устарела') звучит бредово. 
// Завтра вы точку в текст добавите и всё сломалось

Вот статусы в читаемом виде, если уж нужно где-то ручное управление https://github.com/symfony/http-foundation/blob/5....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы