Поиск…


Вступление

Контроллер в Symfony - это PHP, вызываемый (функция, метод объекта или закрытие), который получает HTTP-запрос и возвращает ответ HTTP. Ответ HTTP может содержать все: HTML-страницу, строку JSON, загрузку файла и т. Д.

Чтобы сообщить Symfony, какой контроллер должен обрабатывать определенный запрос, вам необходимо настроить маршрут .

Синтаксис

  • $ this-> generateUrl ('route_name', ['placeholder' => 'value']); // генерирует URL-адрес маршрута route_name с помощью заполнителя
  • $ This-> Render ( 'template.html.twig'); // отображает шаблон Twig и возвращает объект Response
  • $ this-> render ('template.html.twig', ['parameter' => $ value]); // отображает шаблон Twig с параметром
  • throw $ this-> createNotFoundException ('Message'); // генерирует исключение NotFoundHttpException, которое заставит Symfony вернуть ответ 404

замечания

Контроллеры должны быть небольшими и сосредоточиться на обработке HTTP-запросов: фактическая бизнес-логика вашего приложения должна быть делегирована в разные части вашего приложения, например, в вашу модель домена.

Простой класс контроллера

// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class HelloWorldController
{
    public function helloWorldAction()
    {
        return new Response(
            '<html><body>Hello World!</body></html>'
        );
    }
}

Рендеринг шаблона Twig

В большинстве случаев вам нужно будет отображать HTML-ответы из шаблона вместо жесткого кодирования HTML-кода в вашем контроллере. Кроме того, ваши шаблоны не будут статическими, но будут содержать заполнители для данных приложения. По умолчанию Symfony поставляется с Twig, мощным языком шаблонов.

Чтобы использовать Twig в вашем контроллере, расширьте базовый класс Controller Symfony:

// src/AppBundle/Controller/HelloWorldController.php
namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class HelloWorldController extends Controller
{
    public function helloWorldAction()
    {
        $text = 'Hello World!';

        return $this->render('hello-world.html.twig', ['text' => $text]);
    }
}

Создайте шаблон Twig (расположенный в app/Resources/views/hello-world.html.twig ):

<html><body>{{ text }}</body></html>

Twig автоматически заменит place {{ text }} на значение text параметра, переданного контроллером. Это отобразит следующий вывод HTML:

<html><body>Hello World!</body></html>

Возврат страницы 404 (не найден)

Иногда вы хотите вернуть ответ 404 (не найден), потому что запрошенный ресурс не существует. Symfony позволяет это сделать, выбросив NotFoundHttpException .

Базовый контроллер Symfony предоставляет метод createNotFoundException который создает для вас исключение:

public function indexAction()
{
    // retrieve the object from database
    $product = ...;

    if (!$product) {
        throw $this->createNotFoundException('The product does not exist');
    }

    // continue with the normal flow if no exception is thrown
    return $this->render(...);
}

Использование данных из объекта Request

Если вам нужно получить доступ к объекту Request (например, для чтения параметров запроса, для чтения заголовка HTTP или для обработки загруженного файла), вы можете получить запрос как аргумент метода, добавив аргумент типа:

use Symfony\Component\HttpFoundation\Request;

public function indexAction(Request $request)
{
    $queryParam = $request->query->get('param');

    // ...
}

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



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow