2012-02-24 2 views
0

В Zend Framework можно ли добавить функциональность к этому объекту, используемому в контроллере?

Я пытаюсь создать API, определенный файлами классов, хранящимися в отдельной папке. Так хотелось бы иметь возможность:

$userDetails = $this->api->user()->getDetails(); 

Возможно ли это?

ответ

1

Это просто ссылка на экземпляр объекта, поэтому вам нужно просто добавить методы и свойства к рассматриваемому классу. Например:

class MyController extends Zend_Controller_Action 
{ 
    protected $api = null; 

    public function init() 
    { 
     $this->api = new ApiClass(); 
    } 

    public function indexAction() 
    { 
     $this->api->user()->details(); 
    } 


} 

Конечно, это, вероятно, не лучший способ для этого. Я бы, наверное, поставил апи как загрузочный ресурс, и в этом случае Youd сделать:

class MyController extends Zend_Controller_Action 
{ 

    public function indexAction() 
    { 
     $this->getApi()->user()->details(); 
    } 

    public function getApi() 
    { 
     return $this->getInvokeArg('bootstrap')->api; 
    } 
} 
+0

Спасибо - это, наверное, лучший ответ, который подходит моему вопросу. Я рад сделать ресурс Bootstrap, но как я могу сделать класс Autoloader как есть? Поэтому я мог бы вызывать $ this-> api-> className-> Method, не создавая файл api.php, который бы наследовал все классы и методы? Должен быть умный/автоматический способ, конечно? – Sjwdavies

+0

Ну, вы, холодный, создаете свою собственную инфраструктуру в классе API, или oyu может использовать ['Zend_Loader_PluginLoader'] (http://framework.zend.com/manual/en/zend.loader.pluginloader.html), но вам все равно нужно будет создайте все классы, которые API будет использовать. Это действительно должен быть новый вопрос, поскольку он действительно полностью отделен от этого. – prodigitalson

+0

Спасибо, я не думаю, что вы знаете какие-либо ссылки на какие-либо примеры (кроме тех, которые вы включили)? У меня есть все классы, уже созданные в папке/application/api. – Sjwdavies

1

Создать новую папку в библиотеке, где вы можете сохранить свои собственные классы. Например: Sjwdavies Создать новый файл: Sjwdavies/Controller/Action.php

class Sjwdavies_Controller_Action extends Zend_Controller_Action 
{ 
    public $api; 
} 

Ваши контроллеры теперь должны расширить этот класс:

class IndexController extends Sjwdavies_Controller_Action 
{ 
    public $api; 
} 

Не забудьте включить путь к библиотеке в вашем application.ini:

includePaths.library = APPLICATION_PATH "../../library" 
Смежные вопросы