ajax-вызов функции контроллера без действия

Мне нужно добавить блок на страницу. В диалоговом окне добавления блока у меня есть поле выбора, которое мне нужно заполнить данными, полученными от ajax, до сохранения блока (его нельзя сохранить, если я не выберу эту опцию).

Проблема в том, что вызов ajax обычно относится к действию контроллера, которого не существует, пока я не сохраню блок, который я не могу сохранить до выбора параметра. Как я могу сделать ajax-вызов любой другой функции без действия до сохранения блока? Может ли это быть любая другая функция контроллера или это должна быть только функция action_function? Это возможно?

[ОБНОВИТЬ]

Я пытаюсь с маршрутами. Объявил маршрут в контроллере пакета:

$this->app->make(Router::class)->register('/api/get_forum_posts', '\Concrete\Package\AbForum\Src\Forum\MyFunctions::get_forum_posts', null, [], [], '', [], ['GET']);

но он говорит:

Произошло исключение: /srv/www/htdocs/c584/concrete/src/Controller/ApplicationAwareControllerResolver.php:89 Класс \Concrete\Package\AbForum\Src\Forum\MyFunctions не существует.

но класс MyFunctions ЕСТЬ в этой папке packages/ab_forum/src/Forum/MyFunctions.php


person linuxoid    schedule 30.11.2020    source источник
comment
Как насчет добавления пользовательского маршрута? documentation.concrete5.org/developers/framework/routing/   -  person biplob    schedule 30.11.2020
comment
это то, что я сейчас смотрю   -  person linuxoid    schedule 30.11.2020
comment
Это работает? Если не показать нам, что не работает.   -  person 1stthomas    schedule 30.11.2020
comment
еще нет. он говорит, что мой класс не существует, но он есть (я обновлю фрагмент кода)   -  person linuxoid    schedule 30.11.2020


Ответы (1)


Я понял. Следующие работы.

В контроллере пакета:

protected $pkgAutoloaderRegistries = [
    'src/Forum' => 'Forum'
];

public function on_start()
{
    $this->app->make(Router::class)->register('/api/get_forum_posts', 'Forum\MyFunctions::getForumPostsJson', null, [], [], '', [], ['GET']);
...
}

Класс контроллера MyFunctions в packages/ab_forum/src/Forum/MyFunctions.php:

namespace Forum;

use Concrete\Core\Controller\AbstractController;

class MyFunctions extends AbstractController
{
    public function getForumPostsJson()
    {
        $data = $request->request->all();
        ...
        echo json_encode($json);
        exit;
    }
}

Блочная форма с ajax:

$.ajax({
    url: '<?php echo Url::to('api/get_forum_posts'); ?>',
    type: 'GET',
    data: {
        topic: topic.val(),
        date: date.val(),
    },
})
.done(function(data) {
    ...
});
person linuxoid    schedule 30.11.2020
comment
Как насчет уточнения вашего ответа для дальнейших читателей с определением класса вокруг фрагмента (не забывайте о пространстве имен и соответствующем операторе использования). Объяснение параметров регистрации также было бы неплохо. - person 1stthomas; 01.12.2020