我有这个代码:
$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);
发生的情况是,在请求页面时,对同一个 final.css 文件有 2 个相同的请求,但 html 源代码只有 1 个 css 文件的链接。
如有任何帮助,我们将不胜感激。
最佳答案
当在“beforeDispatch”之后完成调度转发时会发生这种情况;您的基本 Controller 将被初始化两次。如果您查看 dispatchLoop如果 Controller 已经初始化,那么你的 Assets 将被编译。如果您随后转发到另一个 Controller ,该 Controller 将被初始化并且您的 Assets 将被再次编译。
我使用了几个解决方案:放置一个 isInitialized 标志并将其作为路由参数与您的转发一起传递到您的 Assets 上,以防止它再次初始化,或者将 Assets 编译移动到 dependencyInjector 上的服务。我认为 phalcon 的文档并没有真正说明如果您遵循他们的 baseController 示例,您的 Assets 每次都会被编译。我们大多数人将 Assets 管理器用作静态的“全部编译”,因为 baseController 方法允许动态包含 Assets ——这似乎是个好主意,但通常只需将所有资源缩小一次并将其作为静态发送文件,在这种情况下,baseController 中的 Assets 是开销。
关于php - Phalcon Assets Management 正在为同一文件创建 2 个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30015187/