ฟังก์ชั่นการเรียก ajax ไปยังคอนโทรลเลอร์โดยไม่มีการดำเนินการ

ฉันต้องเพิ่มบล็อกลงในหน้า ในกล่องโต้ตอบการเพิ่มบล็อก ฉันมีกล่องเลือกซึ่งฉันต้องกรอกข้อมูลที่ได้รับจาก ajax ก่อนที่จะบันทึกบล็อก (ไม่สามารถบันทึกได้เว้นแต่ฉันจะเลือกตัวเลือก)

ปัญหาคือการเรียก ajax มักจะเป็นการกระทำของคอนโทรลเลอร์ซึ่งไม่มีอยู่จนกว่าฉันจะบันทึกบล็อกซึ่งฉันไม่สามารถบันทึกได้ก่อนที่จะเลือกตัวเลือก ฉันจะทำการเรียก ajax ไปยังฟังก์ชัน non-action อื่น ๆ ก่อนที่จะบันทึกบล็อกได้อย่างไร สามารถเป็นฟังก์ชันคอนโทรลเลอร์อื่นได้หรือไม่ หรือต้องเป็นเฉพาะ 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 Class \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({
    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