Перегрузка представления Symfony 3 для наследования контроллера - PullRequest
0 голосов
/ 21 ноября 2018

Допустим, у меня есть 2 контроллера, контент и новости:

class ContentController extends Symfony\Bundle\FrameworkBundle\Controller\Controller {
  public function indexAction() {}
}

и

class NewsController extends ContentController {}

Если представление для indexAction не существует для контроллера новостей (indexActionУнаследовано от родительского класса), я хочу, чтобы Symfony использовал представление контроллера контента (indexAction).Как мне этого добиться?Symfony всегда пытается отобразить представление News / index.html.php, но если такого представления не существует, мне бы хотелось, чтобы Symfony отображал Content / index.html.php.

Можно ли указать механизм визуализации SymfonyПримерно так: если существует файл News / index.html.php, возьмите этот файл, в противном случае возьмите Content / index.html.php

Я использую шаблонизатор PHP, а не веточку.

В настоящее время мы используем Zend Framework, и вы можете просто добавить путь к сценарию (представлению), как описано здесь Просмотреть перегрузку в Zend Framework

1 Ответ

0 голосов
/ 23 ноября 2018

Надеюсь, я вас правильно понимаю, и это может решить вашу проблему:

class ContentController extends Symfony\Bundle\FrameworkBundle\Controller\Controller
{
    /**
     * @Route("/", name="content_index")
     */
    public function indexAction()
    {
        // render Content/index.html.php
    }
}

class NewsController extends ContentController
{
    /**
     * @Route("/news", name="content_news_index")
     */
    public function indexAction()
    {
        parent::indexAction();

        // render News/index.html.php
    }
}

Вы должны настроить маршруты в соответствии с вашими потребностями.


Дополнительный подход в соответствии с запросом вкомментарии:

use Symfony\Component\HttpFoundation\Request;

class ContentController extends Symfony\Bundle\FrameworkBundle\Controller\Controller
{
    /**
     * @Route("/", name="content_index")
     * @Route("/news", name="content_news_index")
     */
    public function indexAction(Request $request)
    {
        $routeName = $request->get('_route');

        if ($routeName === 'content_index') {
            // render Content/index.html.php
        } elseif ($routeName === 'content_news_index') {
            // render News/index.html.php
        }        
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...