zend_loader_autoloaderのセットアップに問題があります。かなり簡単な質問ですが、Zend Frameworkは初めてです
-
23-09-2019 - |
質問
説明については、コードのコメントを読む:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
public function __construct($configSection){
$rootDir = dirname(dirname(__FILE__));
define('ROOT_DIR',$rootDir);
set_include_path(get_include_path()
. PATH_SEPARATOR . ROOT_DIR . '/library/'
. PATH_SEPARATOR . ROOT_DIR .
'application/models'
);
//PROBLEM LIES HERE, BEWARE OF DRAGONS.
//Using this, I receive a deprecated warning.
include 'Zend/Loader.php';
Zend_Loader::registerAutoload();
//Using this, I recieve an error that autoload() has missing arguments.
//Zend_Loader_Autoloader::autoload();
//Load the configuration file.
Zend_Registry::set('configSection', $configSection);
$config = new Zend_Config_Ini(ROOT_DIR . '/application/config.ini',$configSection);
Zend_Registry::set('config',$config);
date_default_timezone_set($config->date_default_timezone);
//Database configuration settings go here. :)
$db = Zend_Db::factory($config->db);
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Zend_Registry::set('db',$db);
}
public function configureFrontController(){
$frontController = Zend_Controller_Front::getInstance();
$frontController->setControllerDirectory(ROOT_DIR . '/application/controllers');
}
public function runApp(){
$this->configureFrontController();
//Runs the Zend application. :)
$frontController = Zend_Controller_Front::getInstance();
$frontController->dispath();
}
}
Zendアプリを構成して、提供する自動装置機能を使用するようにしたいチュートリアルに従うことを試みています。
RegisterAutoload()メソッドを使用する場合、非推奨警告を受け取り、コードの下の別のメソッドを使用するように指示されます。
私に何ができる?
編集:なぜ非推奨方法を使用していたのか:
元のHello WorldのBootstrapファイルの理想的な側面の1つは、Zend_loader :: loadclass()の呼び出しがたくさんあることです。使用する前に必要なクラスをロードすることです。
大規模なアプリケーションでは、さらに多くのクラスが使用されているため、適切なクラスが適切なタイミングで含まれることを確認するために、アプリケーション全体に乱雑になります。
私たちの場所のウェブサイトでは、PHPの__Autoload()機能を使用して、PHPがクラスを自動的にロードするようにします。 PHP5は、まだ定義されていないクラスをインスタンス化しようとするたびに呼び出される__ autoload()マジック関数を導入しました。
Zend_loaderクラスには、リスト3.1 bに示すように、__ autoload()で使用するための特別な登録autoload()メソッドがあります。この方法は、PHP5の標準PHPライブラリ(SPL)SPL_Autoload_register()関数を自動的に使用して、複数のオートローダーを使用できるようにします。
Zend_loader :: registerAutoload()が呼び出された後、まだ定義されていないクラスがインスタンス化された場合はいつでも、クラスを含むファイルが含まれています。これにより、zend_loader :: loadclass()crutterの問題が解決し、特定のリクエストに必要なファイルのみがロードされるようにします。
解決
なぜなら ZF1.8では自動装置が変更されました 交換する必要があります
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
と
require_once 'Zend/Loader/Autoloader.php';
$loader = Zend_Loader_Autoloader::getInstance();
$loader->registerNamespace('App_');
または、フォールバックオートローダーを使用してください
$loader->setFallbackAutoloader(true);
$loader->suppressNotFoundWarnings(false);
チュートリアルの年齢に応じて、 ロブ・アレンのブログでの最近のZF1.10のチュートリアル 同じように。