Поиск…
Вступление
Контроллер в 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 распознает подсказку типа и добавит аргумент запроса к вызову контроллера.