2013-06-01 2 views
-1

ASP.NETMVC을 사용하고 그보다 더 간단하게 할당합니다. 프로젝트에 컨트롤러 plugin을 포함하면됩니다.컨트롤러 플러그인을 어떻게 포함합니까 (젠드 프레임 워크)

class session extends Zend_Controller_Plugin_Abstract{ 
     //Code 
    } 

파일 구조는이
/응용 프로그램과 같은
 /CONFIGS
 /컨트롤러
   /플러그인
  :

나는 session.php에 정의 된 클래스가    /세션 .php
 /레이아웃
 /모델
 /전망

나는 웹 크롤링하고 아무도이 작업을 수행하는 방법에 대한 간단한 explination을 제공하지 않습니다. 내가 시도한 것 :

application.ini 
resources.frontController.plugins.route = "Application_Controllers_Plugins_Session" 
resources.frontController.plugins.route = "Application/Controllers/Plugins/Session" 
resources.frontController.plugins[] = "Controllers_Plugins_Session" 
resources.frontController.plugins[] = "Controllers/Plugins/Session" 

Bootstrap.php : 
$front = Zend_Controller_Front::getInstance(); 
$front->registerPlugin(new Application_Controllers_Plugins_SessionPlugin(), 1); 

나는이 모든 것을 시도했다. 수업을 포함하는 과학을 이해할 수만 있다면 거기에서 알아낼 수 있습니다.

난 항상 라인 어쩌구에서 찾을 수없는 클래스 'ㅋ'입니다 얻을 오류 X

+0

application.ini에 오토로더와 관련된 항목이 있습니까? –

+0

없음 자동 로더 물건 : phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 includePaths.library = APPLICATION_PATH "/../library" bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "부트 스트랩" appnamespace = "어플리케이션" resources.frontController.controllerDirectory APPLICATION_PATH = "/ 컨트롤러" resources.frontController.params.displayExceptions = 1 resources.view [] = resources.layout.layoutPath APPLICATION_PATH = "/ 레이아웃/스크립트 /" – user2443936

답변

0

문제는 다른의 번호를 사용하여 해당 클래스를 인스턴스화하려고 다음 클래스 session를 선언하지만,하고 있다는 것입니다 클래스 이름. 그것은 당신이 표준 자원 자동 로더의 파일 구조를 다음과 같은 것 같아, 당신은 Application의 appnamespace을 선언 한 이후, 플러그인 클래스로 선언되어야한다

class Application_Plugin_Session extends Zend_Controller_Plugin_Abstract 
{ 
    ... 
} 

(대소 문자 구분). 파일 이름은 Session.php (대문자 S)이어야합니다. 그런 다음 올바르게 자동로드되어야합니다.

그런 다음 프런트 컨트롤러에 플러그인을 등록하기 만하면됩니다. 당신은 application.ini에서이 작업을 수행 할 수 있습니다 :

resources.frontController.plugins[] = "Application_Plugin_Session" 

또는 부트 스트랩 클래스

:

$front = Zend_Controller_Front::getInstance(); 
$front->registerPlugin(new Application_Plugin_Session()); 

(그들은 같은 일을 같은 양하지 않는다).

+0

답장을 보내 주셔서 감사합니다. 나는 당신의 제안을 시도하고 여전히 치명적인 오류가 발생합니다 : 클래스 'Application_Plugin_Session'..... \ Zend \ Application \ Resource \ Frontcontroller.php에서 찾을 수 없습니다. 117 번째 줄. 내 질문은 어디에 Session.php 파일을 넣을 수 있습니까? 그것이 포함 되려면? 나는 응용 프로그램/컨트롤러/플러그인, 응용 프로그램/플러그인 및 응용 프로그램/../라이브러리/플러그인을 사용해 보았습니다. 나중에 ini 파일 때문에 includePaths.library = APPLICATION_PATH "/../library"가 있습니다. – user2443936

+1

파일은'application/plugins/Session.php'에 있어야합니다 - 시도해볼 수 있습니까? –

0

신성한 똥! 나는 그것을 알아. 대답은 여기 http://grover.open2space.com/content/autoloading-plugins-zend_application입니다.

이 좋아, 내 bootstrap.php은, (일부), 다음과 같습니다

protected function _initAutoload() 
{ 
    $moduleLoader = new Zend_Application_Module_Autoloader(array(
    'namespace' => '', 
    'basePath' => APPLICATION_PATH)); 
    return $moduleLoader; 
} 

protected function _initPlugins() { 
    $front = Zend_Controller_Front::getInstance(); 
    $front->registerPlugin(new Plugin_YourClassNameHere()); 
} 

이 절대적으로 (_initAutoload없이 작동하지 않습니다) 다음으로 수업이 있습니다. 이름 지정 규칙은 엄청납니다.

class Plugin_YourClassNameHere extends Zend_Controller_Plugin_Abstract 
    { 
     //Code 
    } 

이 클래스는 YourClassNameHere.php라는 파일에 있습니다. 이제 이것이 내가 붙어있는 곳입니다.파일을 어디에 두어야합니까? 글쎄, Autoloader.php 파일은 ..... php \ PEAR \ Zend \ Application \ Module에 있습니다. 이 파일은 프로젝트에 없습니다. 이 파일은 이미 플러그인을 넣는 위치를 정의합니다. (다른 것들을 제외하고). 그래서 이것을 찾았습니다 :

public function initDefaultResourceTypes() 
    { 
     $basePath = $this->getBasePath(); 
     $this->addResourceTypes(array(
      ........ 
      , 
      'model' => array(
       'namespace' => 'Model', 
       'path'  => 'models', 
      ), 
      'plugin' => array(
       'namespace' => 'Plugin', 
       'path'  => 'plugins', 
      ), 
      ....... 
      , 
     )); 
     $this->setDefaultResourceType('model'); 
    } 

플러그인 네임 스페이스는 '플러그인'이고 경로는 '플러그인'입니다. 그래서 YourClassNameHere.php 파일을 application/plugins에 넣었습니다. 이제는 모든 것이 작동합니다!