ปลั๊กอินโหลด cakephp3 สำหรับคำนำหน้าพิเศษ

ฉันมีแอปพลิเคชัน Cakephp 3 และฉันต้องการโหลดปลั๊กอินนี้และตัวฟังเหตุการณ์ด้านล่างสำหรับคำนำหน้าของผู้ดูแลระบบเท่านั้น (ไม่ใช่ทั้งโครงการ)

ฉันจะบรรลุสิ่งนี้ได้อย่างไร?

นี่เป็นของฉัน

config/bootstrap.php

ฉันโหลดปลั๊กอินนี้ที่ไหน (ฉันโหลดสิ่งเหล่านี้ในตอนท้ายของไฟล์)

...

Plugin::load('Josegonzalez/Upload');

\Cake\Event\EventManager::instance()->on(new \App\Controller\Event\AppEventListener());

ฉันต้องการให้บรรทัดเหล่านี้ทำงานบนคำนำหน้าของผู้ดูแลระบบเท่านั้น


person Hamidreza    schedule 16.11.2017    source แหล่งที่มา


คำตอบ (2)


คุณไม่สามารถเรียกใช้โค้ดตามเงื่อนไขตาม การกำหนดเส้นทาง ภายใน boostrap.php เนื่องจากการกำหนดค่าการกำหนดเส้นทางสำหรับแอปของคุณยังไม่ได้โหลด

คุณจะต้องทำแบบ แบบเก่า และใช้ $_SERVER['REQUEST_URI']

$url = $_SERVER['REQUEST_URI'];
$admin = '/admin/';
if(substr($url, 0, strlen($admin)) === $admin) {
    Plugin::load('Josegonzalez/Upload');
    \Cake\Event\EventManager::instance()->on(new \App\Controller\Event\AppEventListener());
}

อัปเดตแล้ว

ปลั๊กอินของคุณควรมีไฟล์บูตสแตรปเป็นของตัวเอง ซึ่งประกอบด้วย

อัปโหลด/config/bootstrap.php:

\Cake\Event\EventManager::instance()->on(new \App\Controller\Event\AppEventListener());

บูทสแตรปของแอปจะบอกให้ CakePHP รวมบูทสแตรปเมื่อโหลดปลั๊กอิน

แอป/config/bootstrap.php:

    Plugin::load('Josegonzalez/Upload', ['bootstrap' => true]);

คุณไม่ควรโหลดปลั๊กอินของคุณตามเงื่อนไข

ฉันคิดว่าคุณกำลังค้นหาการรับรองความถูกต้องตามคำขอปลั๊กอินของคุณ คุณต้องการจำกัดการใช้ปลั๊กอินของคุณเฉพาะผู้ดูแลระบบที่ได้รับอนุญาตเท่านั้น นั่นไม่ใช่ปัญหาปลั๊กอิน มันเป็นปัญหาในการตรวจสอบสิทธิ์ และคุณควรใช้ส่วนประกอบการตรวจสอบสิทธิ์ในปลั๊กอินของคุณเพื่อตรวจสอบว่าคำขอนั้นถูกต้อง และผู้ใช้ปัจจุบันคือผู้ดูแลระบบ

person Reactgular    schedule 16.11.2017
comment
ขอบคุณ. มีที่อื่นอีกไหมที่ฉันสามารถโหลด Listener เหตุการณ์นี้ได้ (ซึ่งฉันสามารถใช้เครื่องมือของ CakePHP เพื่อทำสิ่งนี้ได้ หรือไม่ การใช้ $_SERVER ถือเป็นแนวปฏิบัติที่ไม่ดี (กิจกรรมนี้ใช้ Model.initialize btw) - person Hamidreza; 16.11.2017
comment
เลขที่ . ฉันไม่ต้องการการรับรองความถูกต้องสำหรับปลั๊กอินนี้ ใบสมัครของฉันมี 2 ส่วน อันแรกคือแผงเว็บผู้ดูแลระบบและอันที่สองคือเว็บไซต์สำหรับผู้ใช้ทั่วไป ในแผงผู้ดูแลระบบ ฉันต้องการอัปโหลดรูปภาพ แต่ฉันไม่ต้องการมัน (อัปโหลดปลั๊กอิน) ในหน้าแรกของไซต์ นั่นเป็นเหตุผลที่ฉันต้องการโหลดปลั๊กอินนี้สำหรับคำนำหน้าของผู้ดูแลระบบ และ eventListener กำลังจัดการพฤติกรรมที่จำเป็นในการโหลดสำหรับแผงผู้ดูแลระบบ (เช่นการประทับเวลาที่กำหนดเองของฉันและ ..... ) มันไม่ได้เกี่ยวกับการจัดการการเข้าถึงจริงๆ ฉันต้องการให้โหลดสำหรับโมเดลของฉันเฉพาะในกรณีที่ฉันอยู่ในคำนำหน้าของผู้ดูแลระบบ (เพราะโมเดลของฉันเหมือนกันสำหรับผู้ดูแลระบบและไซต์หลัก) - person Hamidreza; 17.11.2017

การอ้างถึงเอกสารปลั๊กอิน cakephp https://book.cakephp.org/3.0/en/plugins.html#plugin-routes

คุณยังสามารถโหลดเส้นทางปลั๊กอินในรายการเส้นทางของแอปพลิเคชันของคุณได้ การทำเช่นนี้ช่วยให้คุณควบคุมวิธีการโหลดเส้นทางปลั๊กอินได้มากขึ้น และช่วยให้คุณสามารถรวมเส้นทางปลั๊กอินในขอบเขตหรือคำนำหน้าเพิ่มเติมได้

ดังนั้นคุณสามารถทำได้

  Router::scope('/', function ($routes) {
       // Connect other routes.
        $routes->scope('/admin', function ($routes) {
        $routes->loadPlugin('Josegonzalez/Upload');
       });
       });

สำหรับผู้ฟังเหตุการณ์ของคุณ ให้โหลดไว้ในการกำหนดค่าบูทสแตรปของปลั๊กอิน

    // inside plugin bootstra.php
    \Cake\Event\EventManager::instance()->on(new 
     \App\Controller\Event\AppEventListener());
person Cholthi Paul Ttiopic    schedule 17.11.2017
comment
ขอบคุณมาก. ฉันอ่านเอกสารนั้นสองสามครั้งฉันไม่รู้ว่าฉันพลาดไปอย่างไร ฉันสามารถโหลดตัวฟังเหตุการณ์ใน AdminAppController (ตัวควบคุมที่ตัวควบคุมผู้ดูแลระบบทั้งหมดขยาย) หรืออย่างอื่นได้หรือไม่ (พิจารณาว่าเป็นเหตุการณ์ Model.initialize) - person Hamidreza; 17.11.2017
comment
@hamidreza ใช่ เพียงใส่วิธีใช้ implementedEvents ตามที่อธิบายไว้ doc - person Cholthi Paul Ttiopic; 18.11.2017