Пока что это в базовом контроллере, кажется, лучший способ, хотя я согласен, что он немного пахнет. Хотя кажется, что такие активы, как css и js, как предполагается, являются частью авторитета взглядов и не должны затрагиваться нигде, в реальной жизни это не так. Прежде всего, вы настраиваете свои представления из контроллеров, указываете, какие параметры идут там, и вы указываете отдельные активы, зависящие от вида, и т. Д. Нет причин, по которым вы не должны указывать global.css
с ним в базовом контроллере.
Единственное, что я нахожу на самом деле неаккуратным, - это независимое представление, и есть независимый менеджер активов, который на самом деле должен быть объединен вместе, а активы, которые вы устанавливаете на определенном представлении, должны относиться только к этой точке зрения. Бывают случаи, когда вы хотите визуализировать представление независимо от всего остального и использовать его собственные активы из представления по умолчанию, например, визуализируйте приветственный шаблон электронной почты после регистрации. С текущей реализацией это может быть достигнуто только путем перезаписи достаточного количества логики.
В качестве альтернативы вы можете прикрепить этот стиль непосредственно в своем шаблоне, если вы не уменьшаете их в один файл. Вы также можете попробовать добавить актив прямо в свой вид с помощью assets.addCss('css/global.css')
- это может не сработать сразу, если вольт делает это через вспомогательные функции, и в этом случае вы должны сначала реализовать свои собственные. Это, однако, подразумевает добавление логики в представление, которое никогда не бывает хорошим, если вы не можете жить без него. Итак, придерживайтесь подхода базового контроллера.
Редактировать: По иронии судьбы, на следующий день я обнаружил проблему с этим с помощью обработчика событий initialize()
после использования его более года.
При переходе от одного контроллера к другому контроллер, в котором вы переадресовывали, также инициализируется. Это означает, что один и тот же актив добавляется дважды, и если они объединяются в один файл, бог знает, что произойдет ... Это меньше проблема для css (только увеличенный размер), но JS, скорее всего, сломается, часто без любое указание. Это становится легко фиксируется с помощью afterExecuteRoute()
обработчик в контроллере с диспетчером государственной проверки:
public function afterExecuteRoute()
{
// If dispatcher hasn't finished dispatching we shouldn't enter.
if (!$this->dispatcher->isFinished()) {
return;
}
$this->assets->addCss('css/global.css');
}
на ваш взгляд, наследуемым только переопределить с этим:
public function afterExecuteRoute()
{
parent::afterExecuteRoute();
if (!$this->dispatcher->isFinished()) {
return;
}
$this->assets->addCss('css/custom.css');
}
Благодарим Вас за отзыв. Я полагаю, вы подтвердили, что расширение базового контроллера является моим единственным вариантом. Поскольку у меня нет желания добавлять какую-либо ненужную логику в представление, похоже, что я буду расширять базовый контроллер! Благодаря! – 2014-09-15 19:03:09
@ Тайлер, проверьте обновление. –
Ничего себе, это довольно иронично, lol. Это не произошло со мной ... замечательный момент. Спасибо за обновленный ответ, оцените его. – 2014-09-17 17:34:26