나는 이것이 오래된 주제이지만 CompassElephantBundle과 위의 AsseticController 해킹 만 해답이라고 대답했다. 근본적으로 접근법이 있지만 벤더 패키지를 편집 할 필요가 없다는 것을 의미합니다.
내가 해낸 방법은 원래 AsseticController를 복사 한 다음 매개 변수에서 구성에 연결하는 것입니다.
parameters:
assetic.controller.class: Acme\RandomBundle\Controller\AsseticController
는 복사 된 AsseticController은 소스 경로에서 파일 형식에 대해는 preg_match을 수행하고 거기에서 캐싱을 수정합니다.
<?php
/* Original Assetic Controller */
public function render($name, $pos = null)
{
if (!$this->enableProfiler && null !== $this->profiler) {
$this->profiler->disable();
}
if (!$this->am->has($name)) {
throw new NotFoundHttpException(sprintf('The "%s" asset could not be found.', $name));
}
$asset = $this->am->get($name);
if (null !== $pos && !$asset = $this->findAssetLeaf($asset, $pos)) {
throw new NotFoundHttpException(sprintf('The "%s" asset does not include a leaf at position %d.', $name, $pos));
}
$bustCache = preg_match('/\.(scss|sass|less)$/', $asset->getSourcePath());
$response = $this->createResponse();
$response->setExpires(new \DateTime());
if ($bustCache) {
$lastModified = time();
$date = new \DateTime();
$date->setTimestamp($lastModified);
$response->setLastModified($date);
}
else
{
// last-modified
if (null !== $lastModified = $asset->getLastModified()) {
$date = new \DateTime();
$date->setTimestamp($lastModified);
$response->setLastModified($date);
}
}
// etag
if ($this->am->hasFormula($name)) {
$formula = $this->am->getFormula($name);
$formula['last_modified'] = $lastModified;
$response->setETag(md5(serialize($formula)));
}
if ($response->isNotModified($this->request)) {
return $response;
}
if ($bustCache) {
$response->setContent($asset->dump());
}
else {
$response->setContent($this->cachifyAsset($asset)->dump());
}
return $response;
}
/* Rest of controller */
Symfony를 ** less **와 함께 사용하고 변경 사항이 실제 포함 된 파일에 있고 파일에서 가져온 파일이 아니라면 모든 요청에 대해 다시 컴파일합니다. 그게 네 문제 야? – solarc