Как переопределить ресурсы пакета в микроядре Symfony?

У меня есть микроядерный проект Symfony с пользовательской структурой каталога.

Я использовал это: https://github.com/ikoene/symfony-micro

Как я могу переопределить, например, Twig Resources (Исключительные виды)?

Поваренная книга говорит, что я должен создать каталог с именем TwigBundle в моем каталоге ресурсов.

я сделал \AppBundle\Resources\TwigBundle\views\Exception каталог. Превосходящий вид, похоже, не работает.

0

Решение

Спасибо за использование настройки микроядра. Вот как можно переопределить представления исключений.

1. Создайте собственный ExceptionController

Прежде всего, мы собираемся создать наш собственный ExceptionController, который расширяет базовый ExceptionController. Это позволит нам перезаписать путь к шаблону.

    <?php

namespace AppBundle\Controller\Exception;

use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController;
use Symfony\Component\HttpFoundation\Request;

class ExceptionController extends BaseExceptionController
{
/**
* @param Request $request
* @param string $format
* @param int $code
* @param bool $showException
*
* @return string
*/
protected function findTemplate(Request $request, $format, $code, $showException)
{
$name = $showException ? 'exception' : 'error';
if ($showException && 'html' == $format) {
$name = 'exception_full';
}

// For error pages, try to find a template for the specific HTTP status code and format
if (!$showException) {
$template = sprintf('AppBundle:Exception:%s%s.%s.twig', $name, $code, $format);
if ($this->templateExists($template)) {
return $template;
}
}

// try to find a template for the given format
$template = sprintf('@Twig/Exception/%s.%s.twig', $name, $format);
if ($this->templateExists($template)) {
return $template;
}

// default to a generic HTML exception
$request->setRequestFormat('html');

return sprintf('@Twig/Exception/%s.html.twig', $showException ? 'exception_full' : $name);
}
}

2. Создайте шаблоны ошибок

Создайте шаблоны для разных кодов ошибок:

  • error.html.twig
  • error403.html.twig
  • error404.html.twig

В этом примере шаблоны исключений будут помещены в AppBundle/Resources/views/Exception/

3. Переопределите ExceptionController по умолчанию

Теперь давайте укажем на наш новый контроллер исключений в конфигурации.

twig:
exception_controller: app.exception_controller:showAction

1

Другие решения

Мне очень нравится ваше решение, но я нашел другой способ, как это сделать без контроллера пользовательских исключений.

Я понял, что автоматическая дополнительная проверка для переопределенных шаблонов происходит в каталоге Resources в каталоге, когда вы сохраняете свой класс ядра.

Итак, для структуры в вашем репо это:

/Resources/TwigBundle/views/Exception/

Наконец, я немного изменил структуру каталогов, чтобы иметь каталог ‘app’ с файлом ядра внутри. Как в стандартном проекте Symfony.

0

По вопросам рекламы [email protected]