2017-04-27 9 views
0

우리는 Symfony에서 만들 웹 앱을 많이 가지고 있습니다. 이 작업을보다 쉽게하기 위해 템플릿 번들을 만들었습니다.Symfony에서 오류 템플릿을 사용하여 작곡가 번들을 만들려면 어떻게해야합니까?

<?php 
namespace company\TemplateBundle; 
use Symfony\Component\HttpKernel\Bundle\Bundle; 

class TemplateBundle extends Bundle 
{ 
} 

그리고 자원/뷰/template.html.twig에 제목, 내용 같은 것들에 대한 codeblocks를 사용하여 주요 나뭇 가지 템플릿입니다 : (코멘트 밖으로 제거와 함께) 그래서 주 파일 (TemplateBundle.php가) 포함 영역 등 응용 프로그램에서

, 나는 base.html.twig (다른 모든 나뭇 가지 파일이 확장 것을)에서 할 모든은 다음과 같습니다

{# app/Resources/views/base.html.twig #} 

{% extends 'TemplateBundle::template.html.twig' %} 

{% block title %}App Name{% endblock %} 

{% block content %} 
    <div class="container page-content">{% block body %}{% endblock %}</div> 
{% endblock %} 

{% block stylesheets %} 
    <link rel="stylesheet" href="{{ asset('css/appspecific.css') }}"> 
{% endblock %} 

및 배포에

작곡가 설치를 실행할 때,이 번들 템플릿이 업데이트되면 모든 앱이 새로운 버전으로 업데이트되고 재배포. 여태까지는 그런대로 잘됐다.

문제가 발생한 곳은 오류 페이지를 번들에 추가하려고 할 때입니다. 응용 프로그램의 순간에 그래서, 그들은 예를 들어 error404.html.twig에 대한 /app/Resources/TwigBundle/views/Exception/errorxxx.html.twig 에 있습니다

{% extends 'base.html.twig' %} 

{% block body %} 
    <h1>That Page Could Not Be Found</h1> 
    <p>It seems that you are trying to access a page that doesn't exist. Please check your spelling and try again.</p> 
{% endblock %} 

이 방법은 오류 페이지가 기반을 확장 제목 등을 설정하고 주 사이트 템플릿으로 템플릿을 확장합니다. 따라서 오류 페이지를 각 프로젝트에 추가하는 대신 오류 페이지의 내용이 변경 될 때마다 각 프로젝트를 업데이트해야하므로 번들에 추가하려고합니다.

기본 나뭇 가지 오류 페이지를 넘기위한 쉬운 방법은 템플릿 번들 또는 다른 템플릿을 만들 수 있습니까?

쉬운 방법이 없다면 다른 옵션은 무엇입니까?

+1

TwigBundle - http://symfony.com/doc/current/templating/overriding.html & http://symfony.com/과 같은 핵심 번들을 포함하여 번들 일부를 무시하는 방법에 대한 정의 된 규칙이 있습니다. doc/current/bundles/inheritance.html # override-resources-templates-routing-etc –

+0

이 방법은 작동하지 않습니다. 첫 번째 방법은 위에서 설명한대로 앱의 번들에서 템플릿을 재정의하는 방법을 설명하고 다른 번들에있을 때는 도움이되지 않습니다. 두 번째 옵션은 이전에 시도했지만 번들에있는 다른 실험에서 이탈 한 코드가 남아 있어야합니다. 그것을 정리하고 다시 시도하고 지금 일하게하고, 세부 사항을 가진 답변을 곧 게시 할 것입니다. – MicWit

답변

0

그래서 내 번들로 번들을 재정의하는 것 같습니다. 내가 한이 모든 작업을 수행하려면 내가 필요한 컨트롤러 등을 템플릿을 대체 할 수있는, 그래서 난 그냥 리소스에 (예를 들어 error404.html.twig에 대한) 내 오류 템플릿을 넣어, 그리고

<?php 
namespace company\TemplateBundle; 
use Symfony\Component\HttpKernel\Bundle\Bundle; 

class TemplateBundle extends Bundle 
{ 
    public function getParent() 
    { 
     return 'TwigBundle'; 
    } 
} 

에 TemplateBundle.php을 수정했다/views/Exception 디렉토리 (/ vendor/symfony/symfony/src/Symfony/Bundle/TwigBundle의 TwigBundle 번들에있는 위치와 같음) 그리고 base.html.twig를 확장하기 때문에 이제 나머지 부분처럼 보일 것입니다 응용 프로그램.