Hiyerarşik Zend istirahat Yolları nasıl ayarlanır?

3 Cevap php

Zend Framework ile, ben aşağıdaki desen düzenlenen kaynaklar üzerinde REST API için yolları oluşturmaya çalışıyorum:

Nasıl Zend_Rest_Route bu kurarım?

Benim bootstrap.php dosyasında: (id kullanıcılar /) İşte kullanıcıların kaynak için kurulum rota nasıl:

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

Users/324/items/34 id = 324 ve ürün = 34 ve her şey gibi set parametreleri sonuçları Kullanıcılar (ön modül) Model eşleştirilir olurdu böylece [As Anladığım kadarıyla, bu tüm yol yakalamak. . Oradan ben sadece ürün parametresi için test etmek ve bir olsun istek üzerine kullanıcı # 324 için 34. öğeyi almak sanırım] <=== ben sadece kontrol ve bu gibi işler değildir:

Acessing / users/234/items/43 ve

var_dump($this->_getAllParams());

aşağıdaki çıkışı kalan kontrolör sonuçlarının olsun eylem:

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

Her nasılsa hem kimlikleri kayboldu ...

Herkes?

3 Cevap

AFAIK, böyle bir şey yapmak için izin verir Zend_Rest_Route hiçbir özelliği yoktur. Bir öneri ancak uygulamaya olacağım zaman emin değildir vardır. Siz bu özel yol kurmak için Bootstrap bu ekleyebilirsiniz.

$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);

user_id veya item_id parametre olarak UsersController yılında itemAction kullanılabilir hale gelir:

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

Github içine ve bir besteci paket olarak çözüm kaynaklı açın. bkz https://github.com/aporat/Application_Rest_Controller_Route.

Ben Zend_Controller_Router_Route uzanır ve bu gibi özel huzurlu yolları eklemek abiliy ekler yeni bir sınıf ekledi

$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 1 parametre var sadece 'id' için denetleyici adından sonra ilk parametreyi eşler.

Ben geldim iyi çözüm Zend_Rest_Route alt sınıfı ve match () işlevi geçersiz kılmak için. Zend_Rest_Route maç işlevi kopyalayın, ama sadece "Digest URI Params" comment (yaklaşık 60 satır olarak) önce aşağıdaki ekleyin.

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

İşte size aradığınız işlevselliği vermelidir.