문제

이 문제와 밀접한 관련이있는 몇 가지 답변을 찾았지만 여전히 해결할 수는 없습니다. 나는 사람들이 내 포함 된 길에 무언가가 맞지 않는다고 말하지만, 나는 아무 소용이 없다고 생각할 수있는 모든 결의안을 시도했다.

오류는 다음과 같습니다.

Fatal error: Class 'Zend_Controller_Action' not found in /Users/*me*/Sites/*site*/application/controllers/IndexController.php on line 3

다음은 포함 된 진술입니다.

$newIncludePath = array();
$newIncludePath[] = '.';
$newIncludePath[] = 'include';
$newIncludePath[] = get_include_path();
$newIncludePath[] = '../library';
$newIncludePath[] = '../application/classes/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/controllers';
$newIncludePath = implode(PATH_SEPARATOR, $newIncludePath);
set_include_path($newIncludePath);

require_once 'Zend/Controller/Front.php';
require_once 'Zend/Loader.php';

Zend_Loader::registerAutoload();

나는 포럼을 수색하는 데 몇 시간 동안 키보드에서 머리를 두드리고 있습니다. 저는 Zend와 PHP를 처음 사용합니다. 이 물건은 나에게 왕의 두통을 주었다. 경로에 컨트롤러를 명시 적으로 추가했습니다. 나는 내가 무엇을 간과하고 있는지 전혀 모른다.

btw, the 그리고 대지 개인 정보 보호 이유로 개정 된 이름입니다.

나는 결의에 대해 영원히 감사합니다.

MJS-EDIT :

나는 내 포함이 약간의 원래 인 것을 발견했다. 그래서 다음은 다음과 같습니다.

$newIncludePath = array();
$newIncludePath[] = '.';
$newIncludePath[] = get_include_path();
$newIncludePath[] = '../library';
$newIncludePath[] = '../application/classes/';
$newIncludePath[] = '../application/models/';
$newIncludePath[] = '../application/library/';
$newIncludePath = implode(PATH_SEPARATOR, $newIncludePath);
set_include_path($newIncludePath);

var_dump의 출력 :

string(148) "../application/controllers:.:.:/Applications/MAMP/bin/php5/lib/php:../library:../application/classes/:../application/models/:../application/library/"

Zend/Controller/Action이 ../library 아래에 존재한다는 것을 알았습니다. 따라서 앱이 왜 찾을 수 없는지 이해하지 못합니다.

phpdebug에서 IndexController를 실행하면 반환됩니다

string(170) ".:/Users/me/Sites/site:/Applications/Zend/Zend Studio - 7.1.0/plugins/org.zend.php.framework.resource_7.1.0.v20091101-1523/resources/ZendFramework-1/library/" 
Fatal error: Class 'Zend_Controller_Action' not found in /Users/me/Sites/site/application/controllers/IndexController.php on line 5
도움이 되었습니까?

해결책

zend_appilcation autoloader의 기본 동작은 클래스 이름을 선택하는 것입니다.

Zend_Controller_Action

경로로 변환하십시오

Zend/Controller/Action.php

그런 다음 클래스를로드하기 위해 필요한 파일을 포함/요구하려고 시도하십시오.

그래서 당신은 두 가지 다른 것들이 잘못 될 수 있습니다

  1. PHP 포함 경로는 기본 Zend 라이브러리 폴더를 가리키지 않으며 포함하려는 시도 Zend/Controller/Action.php 실패하고 있습니다.

  2. 자동 로더가 올바르게 등록되지 않았습니다

그래서, 당신의 IndexController.php 파일, 클래스 선언 위의 글로벌 네임 스페이스 영역에 다음을 추가하십시오.

var_dump(get_include_path());

이것은 포함 경로 값을 출력합니다. 포함 된 경로의 각 개인 경로를 확인하고 추가 Zend/Controller/Action.php 그들 중 하나는 action.php 파일로 해결됩니다. 그렇지 않은 경우, 이것이 일어날 수있는 경로가 있는지 확인하기위한 조치를 취하십시오.

(위의 것은 Zend_application을 사용하고 있다고 가정합니다. Zend_application은 자체 Zend 프레임 워크를 기반으로 Zend의 자체 응용 프로그램 프레임 워크를 사용한다고 가정합니다. 구성 요소를 독립형으로 사용하는 경우 추가 합병증이있을 수 있습니다).

다른 팁

포함 경로는 응용 프로그램 루트와 관련이 있지만 파일은 다른 레벨 (예 : 응용 프로그램/컨트롤러)으로로드됩니다. 따라서 모든 경로는 이제 Application/Controllers /../ 라이브러리처럼 보입니다.

포함 된 경로에서 절대 경로를 사용하여 이것을 고칠 것입니다. 예를 들어, 변경해보십시오 ../library는 사용자//사이트/대지/도서관

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top