Условно назначьте значения контроллера Laravel для метода построения

#laravel #laravel-5 #model-view-controller

Вопрос:

Я работаю с проектом Laravel, который использует массив атрибутов модели для отображения его в представлении. В отличие от большинства вариантов Laravel, где вы отправляете набор данных в представление и выбираете, как его отображать в нашем проекте, который определен в переменной контроллера.

Эта переменная ($showFields) ожидает массив атрибутов модели, и значения отображаются в представлении.

Дело в том, что мне нужно адаптировать показанные атрибуты на основе идентификатора одного поставщика (vendor_id). Моя идея заключается в том, чтобы на основе идентификатора продавца назначить тот или иной массив атрибутов.

Я пытался использовать метод конструктора контроллера, но он не работает, так как при его вызове кажется, что у него еще нет значений. Возможно ли это вообще?

Это код контроллера:

 protected $showFields = []; // This is the variable that tells the view what attributes to show

protected $vendorInformation =  [...];

protected $noVendorInformation = [...];

public function __construct(QuoteService $quoteService)
{
    parent::__construct();

    $this->quoteService = $quoteService;

    if($this->vendor_id === xx){
        array_push($this->showFields, $this->noVendorInformation);
    } else {
        array_push($this->showFields, $this->vendorInformation);
    }

}
 

Я работаю с Laravel 5.7

Комментарии:

1. попробуйте использовать шаблон проектирования репозитория с разными интерфейсами, используйте внедрение зависимостей с использованием контейнеров для передачи классов с разными интерфейсами, зачем использовать конструктор в контроллере?

2. Я решил использовать метод конструктора, потому что мне нужно заполнить поля $SHOW, как только конструктор будет инициализирован, чтобы быть доступным для передачи значений в представление.

3. но я предполагаю, что это репозиторий для использования с антипаттернами, поскольку он вызывает 2 разных класса с одинаковым интерфейсом в соответствии с вашими условиями. (также в приведенном выше комментарии это разные классы, а не интерфейсы)

4. наконец, что я сделал, так это извлек модель по идентификатору в конструкторе, а затем проверил идентификатор поставщика. Это правда, что это неаккуратно, но я не знаю, где его тогда разместить.