#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. наконец, что я сделал, так это извлек модель по идентификатору в конструкторе, а затем проверил идентификатор поставщика. Это правда, что это неаккуратно, но я не знаю, где его тогда разместить.