Phalcon Assets Management 正在为同一文件创建 2 个请求
Phalcon Assets Management is creating 2 requests for the same file
我有这个代码:
$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 个 link css 文件.
如有任何帮助,我们将不胜感激。
当在 'beforeDispatch' 之后完成调度转发时会发生这种情况;您的基本控制器将被初始化两次。如果您查看 dispatchLoop 控制器是否已初始化,那么您的资产将被编译。如果您随后转发到另一个控制器,该控制器将被初始化并且您的资产将被再次编译。
我使用了几个解决方案:放置一个 isInitialized 标志并将其与您的转发一起作为资产的路由参数传递,以防止它再次初始化,或者将资产编译移动到 dependencyInjector 上的服务.我认为 phalcon 的文档并没有真正说明如果您遵循他们的 baseController 示例,您的资产每次都会被编译。我们大多数人将资产管理器用作静态 "compile all",因为 baseController 方法允许动态包含资产——这似乎是个好主意,但通常只需将所有资源缩小一次并将其作为静态文件,在这种情况下,baseController 中的资产是开销。
我有这个代码:
$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 个 link css 文件.
如有任何帮助,我们将不胜感激。
当在 'beforeDispatch' 之后完成调度转发时会发生这种情况;您的基本控制器将被初始化两次。如果您查看 dispatchLoop 控制器是否已初始化,那么您的资产将被编译。如果您随后转发到另一个控制器,该控制器将被初始化并且您的资产将被再次编译。
我使用了几个解决方案:放置一个 isInitialized 标志并将其与您的转发一起作为资产的路由参数传递,以防止它再次初始化,或者将资产编译移动到 dependencyInjector 上的服务.我认为 phalcon 的文档并没有真正说明如果您遵循他们的 baseController 示例,您的资产每次都会被编译。我们大多数人将资产管理器用作静态 "compile all",因为 baseController 方法允许动态包含资产——这似乎是个好主意,但通常只需将所有资源缩小一次并将其作为静态文件,在这种情况下,baseController 中的资产是开销。