@dev400

Насколько плохо echo внутри метода?

Это контроллер. Приходится делать echo лейаута. Насколько это криво?
public function index()
	{
		$layout = new View("/layouts/main");
		$view = new View("/site/index");
		$layout->set( 'content', $view->render() );
		$layout->set( 'title', $view->title );
		echo $layout->render();
	}

Планирую переделать вот так
public function index() {

        $news = new View( "/site/news/index", ['model' => $model, 'msg' => $this->msg] );
        $layout = new View( "/layouts/news", ['content' => $news->render()] );
        $layout->set( 'title', $news->title );
        Registry::set('layout', $layout->render() );
     
    }


И потом соответственно
echo Registry::get('layout');
  • Вопрос задан
  • 373 просмотра
Решения вопроса 3
@karminski
Senior React.JS Developer
Следуя канонам PHP, любой метод должен возвращать значение. Так что ваш вариант "кривоват". Другое дело, если вы используете какой-то фреймворк, в котором так положено делать. Например в Yii 1.0 экшены контроллера именно так и выглядели. Во второй же версии Yii 2.0 это было исправлено на правильное поведение. Любой экшн возвращал какое-то значение.
Ответ написан
Комментировать
iit
@iit
TeamLead + php/js разработчик
Если вы используете фреймворк то шаблон должен выводится средствами фреймворка.

Если самописка то в проекте должен быть только один финальный echo который выводит уже готовый шаблон.

echo на прямую в контролере - однозначно зло.
Ответ написан
Комментировать
Rou1997
@Rou1997
Самописный фреймворк, что ли?

Вот так сделайте:

public function index()
  {
    $layout = new View("/layouts/main");
    $view = new View("/site/index");
    $layout->set( 'content', $view->render() );
    $layout->set( 'title', $view->title );
    return $layout->render();
  }


Возвращаемое значение должен обрабатывать сам фреймворк, то есть он вызывает метод index (с помощью "рефлексии") и возвращаемый код выводит в echo.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@shagguboy
в Симфони экшн возвращает отрендеренный шаблон. выводится он позже.
Ответ написан
Комментировать
Keanor
@Keanor
Ведущий разработчик
лучше сделайте в контроллере

return$layout;

А в месте где формируете ответ уже и выводите.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы