Так можно ли создать такой режим для CakePHP, может быть, при низком уровне загрузки классов?Я не хотел бы использовать runkit_method_redefine () и заменить, например, метод App :: import (), если runkit_method_redefine () помечен как «экспериментальный».Любые предложения или идеи?
Все запросы изначально проходят через app/webroot/index.php
.Этот файл не является частью ядра и может быть изменен вами.Что вы можете сделать, это изменить include paths , чтобы получить список папок вашего собственного создания до CAKE_CORE_INCLUDE_PATH
.Здесь я задаю /absolute/path/to/custom
в качестве пути включения:
if (function_exists('ini_set') && ini_set('include_path', ROOT . DS . 'custom' . PATH_SEPARATOR . CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'))) {
После этого раздела загружается файл начальной загрузки CakePHP (/cake/bootstrap.php
) и начинается загрузка многих классов ядра:
require CORE_PATH . 'cake' . DS . 'basics.php';
$TIME_START = getMicrotime();
require CORE_PATH . 'cake' . DS . 'config' . DS . 'paths.php';
require LIBS . 'object.php';
require LIBS . 'inflector.php';
require LIBS . 'configure.php';
require LIBS . 'set.php';
require LIBS . 'cache.php';
Configure::getInstance();
require CAKE . 'dispatcher.php';
Вставив свой собственный путь включения, вы можете заменить их, скопировав их в этот путь:
ROOT
|- app/
|- cake/
|- libs/
|- configure.php // this would usually be loaded
|- custom/
|- cake/
|- libs/
|- configure.php // now this is loaded
(Примечание: файл configure.php
содержит классы Configure
и App
.)
Короче говоря, изменив одну строку в app/webroot/index.php
, теперь вы можете заменить любую часть ядра CakePHP, не редактируя ее напрямую.
Теперь вы можете вносить необходимые изменения вApp::import
но, поскольку это нигде не задокументировано, ваш пробег может отличаться.