2012-02-24 3 views
0

젠드 프레임 워크에서 컨트롤러 내에 사용 된 $ this 객체에 기능을 추가 할 수 있습니까?

별도의 폴더에 저장된 클래스 파일로 정의 된 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가있는 API를 둘 것입니다 수행

class MyController extends Zend_Controller_Action 
{ 

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

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

감사합니다. 아마도 내 질문에 가장 잘 맞는 답변 일 것입니다. 부트 스트랩 리소스를 만들어서 기쁩니다.하지만 클래스 오토로더를 어떻게 만들 수 있습니까? 그래서 모든 클래스와 메소드를 압박하는 api.php 파일을 만들 필요없이 $ this-> api-> className-> Method를 호출 할 수 있습니까? 확실하게 영리하고 자동화 된 방법이 있어야합니까? – Sjwdavies

+0

API 클래스에서 자신의 인프라를 차갑게 만들거나 oyu가 ['Zend_Loader_PluginLoader'] (http://framework.zend.com/manual/en/zend.loader.pluginloader.html)를 활용할 수 있지만 여전히 필요합니다. API가 사용할 모든 클래스를 작성하십시오. 이것은 정말로이 질문과 완전히 별개로 새로운 질문이 될 것입니다. – prodigitalson

+0

감사합니다. 나는 당신이 포함하는 것 이외의 어떤 예들에 대한 어떤 링크를 알지 못한다고 생각합니까? 모든 클래스는 이미/application/api 폴더에 생성되어 있습니다. – Sjwdavies

1

는 자신의 클래스를 저장할 수 있습니다 라이브러리에 새 폴더를 만듭니다. 예를 들면 :

includePaths.library = APPLICATION_PATH "../../library" 
:

class IndexController extends Sjwdavies_Controller_Action 
{ 
    public $api; 
} 

것은 당신의 application.ini에서 라이브러리 경로를 포함해야합니다 : Sjwdavies/Controller/Action.php

class Sjwdavies_Controller_Action extends Zend_Controller_Action 
{ 
    public $api; 
} 

귀하의 컨트롤러는 이제이 클래스를 확장해야합니다 : Sjwdavies 새 파일 만들기