Перегрузка представления Symfony 3 для наследования контроллера

Допустим, у меня есть 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

0

Решение

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

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
}
}
}
0

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

Других решений пока нет …

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