Контроллер Pimcore
Введение
Контроллеры Pimcore играют определенную роль в шаблоне MVC. Они связывают шаблоны проектирования воедино и содержат или делегируют функциональность приложения. Рекомендуется использовать контроллеры как можно более компактными и инкапсулировать бизнес-логику в модели или сервисы/библиотеки.
Pimcore предоставляет абстрактный класс (Pimcore\Controller\FrontendController), который может быть реализован вашими контроллерами.
Этот абстрактный класс добавляет некоторые функции диспетчеризации, специфичные для Pimcore, особенно в сочетании с документами Pimcore,
поддержкой нескольких языков и т.д.
Именование файла и класса такое же, как и в Symfony.
Специальные особенности Pimcore и примеры
| Имя контроллера | Имя файла | Имя класса | Каталог представлений по умолчанию |
|---|---|---|---|
| Content | src/Controller/ContentController.php | App\Controller\ContentController | /templates/content |
| News | src/Controller/NewsController.php | App\Controller\NewsController | /templates/news |
Для каждого действия в контроллере существует отдельный метод, оканчивающийся на Action. Например, DefaultController поставляется вместе с Pimcore, и при создании пустой страницы автоматически будет вызван метод defaultAction, который использует шаблон /templates/default/default.html.twig.
Шаблоны можно рендерить стандартным способом Symfony, используя $this->render('foo.html.twig') или атрибут #Template[].
Примеры
<?php
namespace App\Controller;
use Pimcore\Controller\FrontendController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Pimcore\Controller\Attribute\ResponseHeader;
class DefaultController extends FrontendController
{
/**
* Очень простой пример с использованием $this->>render() и передачей параметра 'foo'
*/
public function myAction(): Response
{
return $this->render('content/default.html.twig', ["foo" => "bar"]);
}
/**
* Пример использования атрибута #[Template] для разрешения представления.
* Контроллер фронтенда также предоставляет методы для добавления заголовков ответа или через атрибуты,
* не имея доступа к конечному объекту ответа (поскольку он автоматически создается при рендеринге представления).
*
*/
#[Template('/default/header.html.twig')]
#[ResponseHeader(key: "X-Foo", values: ["123456", "98765"])]
public function headerAction(Request $request): array
{
// запланируйте заголовок ответа с помощью кода
$this->addResponseHeader('X-Foo', 'bar', false, $request);
return ["foo" => "bar"];
}
/**
* Этот экшн возвращает ответ в формате JSON.
*/
public function jsonAction(Request $request): JsonResponse
{
return $this->json(array('key' => 'value'));
}
/**
* Этот возвращает стандартный объект ответа symfony
*/
public function customAction(Request $request): Response
{
return new Response("Just some text");
}
}
Есть также некоторые свойства, которые могут быть полезны:
| Название | Тип | Описание |
|---|---|---|
$this->document | Document | Ссылка на текущий документ, если таковой имеется. |
$this->editmode | boolean | Истинно, если вы находитесь в режиме редактирования (администратор) |
Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.