سؤال

مع إطار Zend، أحاول بناء طرق ل API بقية على الموارد المنظمة في النمط التالي:

كيف أقوم بإعداد هذا مع zend_rest_route؟

فيما يلي كيفية إعداد الطريق لمورد المستخدمين (المستخدمين /: ID) في ملف Bootstrap.php الخاص بي:

  $this->bootstrap('frontController');
  $frontController = Zend_Controller_Front::getInstance();
  $restRoute = new Zend_Rest_Route($frontController);
  $frontController->getRouter()->addRoute('default', $restRoute);

بقدر ما أفهم، هذا هو كل الطريق، لذلك سيؤدي المستخدمون / 324 / العناصر / 34 إلى المعلمات تعيين كمعرف = 324 وعناصر = 34 وسيتم تعيين كل شيء إلى نموذج المستخدمين (الوحدة الأولى). من هناك، أعتقد أنني يمكن أن اختبار فقط لمعلمة العناصر واسترداد العنصر رقم 34 للمستخدم # 324 على طلب الحصول عليه.] <=== لقد قمت بالتحقق منه فقط ولا يبدو أنه يعمل هكذا:

acessing / المستخدمين / 234 / البنود / 43 و

var_dump($this->_getAllParams());

في إجراءات الحصول على مراقب الباقي يؤدي إلى الإخراج التالي:

array(4) {
 ["controller"]=> string(5) "users"
 ["action"]=>  string(3) "get"
 [2]=>  string(5) "items"  ["module"]=>  string(7) "default"]
}

في حد ذاتها كلا المشترين قد فقدت ...

أي واحد؟

هل كانت مفيدة؟

المحلول

AFAIK، لا توجد ميزة في zend_rest_route التي تتيح لك القيام بشيء مثل هذا. هناك اقتراح ولكن غير متأكد متى ستنفذ. يمكنك إضافة هذا في bootstrap الخاص بك لإعداد هذا الطريق المخصص.

$front = $this->getResource('FrontController'); 
$testRoute = new Zend_Controller_Router_Route(
    'users/:user_id/items/:item_id',
    array(
        'controller' => 'users',
        'action' => 'item',
        'module' => 'default'
    )
);

$front->getRouter()->addRoute('test', $testRoute);

هوية المستخدم أو item_id. تصبح متاحة في فصيل في userscontroller كمعلمات:

$user_id = $this->_request->getParam('user_id');

نصائح أخرى

أفتح مصادر الحل في جيثب وكما حزمة الملحن. يرى https://github.com/aporat/application_rest_controller_route..

أضفت فئة جديدة تمتد Zend_Controller_Router_Router_Router_Router_Router_Route ويضيف أبيلي لإضافة طرق مريحة مخصصة، مثل

$frontController = Zend_Controller_Front::getInstance();
$frontController->getRouter()->addRoute('users-messages', new Application_Rest_Controller_Route($frontController, 'users/:user_id/messages', ['controller' => 'users-messages']));

zend_rest_route خرائط المعلمة الأولى بعد اسم وحدة تحكم "معرف" فقط عندما يكون هناك معلمة واحدة.

أفضل حل آتي معه هو الفئة الفرعية ZenD_Rest_Route وتجاوز دالة المباراة (). نسخ وظيفة مطابقة zend_rest_route، ولكن أضف ما يلي فقط قبل التعليق "Digest URI Params" (حوالي 60 خطا في).

if($pathElementCount > 1 && $path[0] != 'id') {
    $params['id'] = urldecode($path[0]);
    array_shift($path);
}  

يجب أن يمنحك الوظيفة التي تبحث عنها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top