지금까지 기본 컨트롤러에서하는 것이 가장 좋은 방법 인 것처럼 보이지만 조금은 냄새가 난다는 것에 동의합니다. 자산이 css와 js와 같이보기 권한의 일부로 여겨지고 다른 곳에서 건드려서는 안되는 것처럼 느껴지 긴하지만 실생활에서는 그렇지 않습니다. 먼저 컨트롤러에서 뷰를 구성하고 거기에 어떤 매개 변수가 들어가는지 지정하고 개별 뷰 특정 애셋 등을 지정합니다. 기본 컨트롤러에 global.css
을 제공하지 않아야하는 이유는 없습니다.
유일하게 내가보기 싫은 것은 독립적 인 견해가 있으며 실제로는 결합되어야하는 독립 자산 관리자가 있으며 특정보기에서 설정 한 자산은 해당보기에만 관련되어야한다는 것입니다. 다른 모든 것과 독립적으로 뷰를 렌더링하고 기본 뷰에서 자체 자산을 사용하려는 경우가 있습니다 (예 : 등록 후 환영 전자 메일 템플릿을 렌더링). 현재의 구현으로 이것은 상당한 양의 로직을 덮어 씀으로써 만 가능합니다.
또는 하나의 파일로 축소하지 않으면 해당 스타일을 템플릿에 직접 첨부 할 수 있습니다. 또한 assets.addCss('css/global.css')
으로보기에서 직접 자산을 추가 할 수도 있습니다. 볼트가 도우미 기능을 통해 이것을 수행하면 바로 작동하지 않을 수 있습니다.이 경우 자체 기능을 먼저 구현해야합니다. 그러나 이것은 뷰에 로직을 추가하는 것을 의미합니다. 뷰를 사용하지 않고서는 살 수 없다면 결코 좋은 일이 아닙니다. 따라서 기본 컨트롤러 방식을 고수하십시오.
편집 : 아이러니하게도, 일년이 지난 후에 나는 1 년 이상 사용 후 initialize()
이벤트 처리기를 통해이 문제를 발견했습니다.
한 컨트롤러에서 다른 컨트롤러로 전달할 때 전달한 컨트롤러도 초기화됩니다. 즉, 동일한 애셋이 두 번 더 추가되고, 하나의 파일로 연결되면 신이 어떻게 될지를 알 수 있습니다 ... CSS의 경우에는 문제가 적지 만 크기가 커지면 JS가 깨지기 쉽습니다. 어떤 표시. 당신은 또한 DI의 자산 관리자를 조작 할 수
public function afterExecuteRoute()
{
parent::afterExecuteRoute();
if (!$this->dispatcher->isFinished()) {
return;
}
$this->assets->addCss('css/custom.css');
}
의견에 감사드립니다. 기본 컨트롤러를 확장하는 것이 유일한 방법이라는 것을 확인했다고 가정합니다. 뷰에 불필요한 로직을 추가 할 의사가 없기 때문에 기본 컨트롤러를 확장하는 것처럼 보입니다! 감사! –
@Tyler, 업데이트를 확인하십시오. –
와우, 그건 꽤 아이러니합니다. 롤. 그건 나에게 발생하지 않았다 ... 위대한 요점. 업데이트 된 답변을 주셔서 감사합니다, 그것을 감사드립니다. –