Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
72 lines (57 sloc) 2.44 KB

Создание произвольных страниц

В Iris CRM предусмотрен механизм создания произвольных страниц. Методы, реализующие построение таких страниц, описываются в PHP скриптах конфигурации, в каждом разделе.

Запросы к страницам имеют следующий вид:
https://iriscrm.domain/page/<section>/<method>

Например, запрос https://iriscrm.domain/page/Product/list приведет к вызову метода \MyCompany\Config\MyConfig\sections\page_Product::list().

Для методов с аннотацией @ReauireAuth(false) авторизация не требуется.

Пример метода, выполняющего построение произвольной страницы https://iriscrm.domain/page/Demo/testMethodWithoutAuth

<?php

namespace SomeClient\Config\ConfigName\sections\Demo;

use Config;
use Iris\Annotation\RequestMethod;
use Iris\Annotation\RequireAuth;

class page_Demo extends Config
{
    /**
     * @RequireAuth(false)
     * @RequestMethod({"get"})
     * @param \Symfony\Component\HttpFoundation\Request $request
     * @return string
     */
    public function testMethodWithoutAuth($request) {
        return '<html>My HTML page</html>';
    }

    /**
     * @RequireAuth(false)
     * @RequestMethod({"get"})
     * @param \Symfony\Component\HttpFoundation\Request $request
     * @return string
     */
    public function usingTwig($request) {
        return $this->renderView('demo', [
            'data' => $request->query->all(),
        ]);
    }
}

Можно определять необходимость авторизации с помощью аннотации @\Iris\Annotations\RequireAuth. Также можно ограничивать доступ запросам разных типов с помощью аннотации @\Iris\Annotation\RequestMethod.

В случае, если необходимо подменить роутер, отвечающий за обработку таких запросов, переопределите используемый роутер в сервис провайдере.

<?php

$this->container
    ->register('page.router', CustomPageRouter::class)
    ->addArgument(new Reference('http.request'))
    ->addArgument(new Reference('loader'));