【问题标题】:ajax call to controller function without actionajax调用控制器功能而不采取行动
【发布时间】:2020-11-30 02:21:55
【问题描述】:

我需要在页面中添加一个块。在块添加对话框中,我有一个选择框,我需要在保存块之前填充从 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 中

【问题讨论】:

标签: ajax controller concrete5


【解决方案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']);
...
}

packages/ab_forum/src/Forum/MyFunctions.php 中的 MyFunctions 控制器类:

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) {
    ...
});

【讨论】:

  • 如何使用围绕 sn-p 的类定义为更多读者详细说明您的答案(不要忘记命名空间和相关的 use 语句)。注册参数的解释也很好。
猜你喜欢
  • 2019-06-27
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-09
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多