У меня есть этот код:
$this->assets
->collection('header')
->setTargetPath('css/final.css')
->setTargetUri('css/final.css')
->addCss('css/base/base.css')
// Use the built-in Cssmin filter
->addFilter(new \Phalcon\Assets\Filters\Cssmin);
происходит то, что при запросе страницы есть 2 идентичных запроса на один и тот же файл final.css, но в исходном коде html есть только 1 ссылка на файл css.
Любая помощь будет оценена.
Это происходит, когда отправка вперед была выполнена после ‘beforeDispatch’; Ваш базовый контроллер будет инициализирован дважды. Если вы посмотрите на dispatchLoop если контроллер был инициализирован, то ваши ресурсы будут скомпилированы. Если вы затем перенаправите на другой контроллер, этот контроллер будет инициализирован, и ваши ресурсы будут скомпилированы снова.
Есть пара решений, которые я использую: либо установите флаг isInitialized и передайте его вместе с вашим перенаправлением в качестве параметра маршрута в ваши активы, чтобы предотвратить его повторную инициализацию, либо перенесите компиляцию активов в службу на dependencyInjector. Я думаю, что документы для phalcon не совсем ясно дают понять, что ваши ресурсы будут компилироваться каждый раз, если вы последуете их примеру baseController. Большинство из нас использует диспетчер ресурсов в качестве статического «компилировать все», тогда как метод baseController позволяет динамически включать активы — что кажется хорошей идеей, но обычно хорошо просто минимизировать все ресурсы один раз и отправить его как статический файл, в этом случае ресурсы в baseController являются служебными.
Других решений пока нет …