Перейти к основному содержимому

Контроллер Pimcore

Введение

Контроллеры Pimcore играют определенную роль в шаблоне MVC. Они связывают шаблоны проектирования воедино и содержат или делегируют функциональность приложения. Рекомендуется использовать контроллеры как можно более компактными и инкапсулировать бизнес-логику в модели или сервисы/библиотеки.

Pimcore предоставляет абстрактный класс (Pimcore\Controller\FrontendController), который может быть реализован вашими контроллерами. Этот абстрактный класс добавляет некоторые функции диспетчеризации, специфичные для Pimcore, особенно в сочетании с документами Pimcore, поддержкой нескольких языков и т.д.

Именование файла и класса такое же, как и в Symfony.

Специальные особенности Pimcore и примеры

Имя контроллераИмя файлаИмя классаКаталог представлений по умолчанию
Contentsrc/Controller/ContentController.phpApp\Controller\ContentController/templates/content
Newssrc/Controller/NewsController.phpApp\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->documentDocumentСсылка на текущий документ, если таковой имеется.
$this->editmodebooleanИстинно, если вы находитесь в режиме редактирования (администратор)

Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.