2013-04-05 2 views
5

Существует способ, в кодом воспламенитель под системы/ядра/common.php называется load_class().overwrrite код воспламенитель common.php

Я хотел был бы переписать этот метод. Обычно для перезаписывания класса воспламенителя кода я создаю файл, такой как MY_Common.php, однако в этом случае Common.php представляет собой набор методов и нет классов, которые их инкапсулируют.

Итак, как именно я это делаю?

+0

Почему вы хотите переписать этот метод? – complex857

+0

из-за http://stackoverflow.com/questions/15833762/running-load-class-on-mthaml – user391986

+1

ну, вы могли бы просто иметь две строки кода для вашего haml include + регистрацию автозагрузчика внутри конструктора MY_Controller :: __() 'или в крючке, и вам не придется возиться с внутренними элементами CI. – complex857

ответ

9

Нет официально поддерживаемого способа сделать это с помощью встроенных механизмов расширения. Подумайте о другом способе достижения своей цели.

Однако функции внутри Common.php все завернуты внутри if проверки, если функция уже существует или нет, так что вы можете сделать следующее:

  1. Создайте свой MY_Common.php поместить где-то в вашем проекте (возможно application/core/ чтобы отразить другие аналогичные распространяется)
  2. Откройте файл index.php в корневом каталоге проекта
  3. вставки include APPPATH.'core/MY_Common.php';, прежде чем закрытие
    require_once BASEPATH.'core/CodeIgniter.php'; линия

Теперь, если у вас есть load_class функцию в вашем MY_Common.php будет тень от оригинальной версии.

+0

Я вижу, вроде хаки, естественно, потому что он не поддерживается, но может работать, спасибо. – user391986

+0

Хорошо, хороший способ, но как можно вызвать функции, когда мне нужно использовать оба из них одновременно? В вашем решении мы теряем исходную функцию. – ganji

+0

@kasra, Короткий ответ, что вы не можете. PHP не позволит вам иметь оба из них с тем же именем, и вы хотите, чтобы ваша версия с оригинальным именем (вот и все). Проще всего мне кажется, что вы просто редактируете исходный файл и переименовываете вещи, или, возможно, добавляете пространство имен в файл. Боюсь, вам не повезло с php, может быть, если у вас [runkit] (http://php.net/manual/en/book.runkit.php), вы можете заставить его работать с [runkit_function_rename] (http : //php.net/manual/en/book.runkit.php) – complex857

0

Правильный/официальный способ сделать это - переписать основную функцию ядра в ie. common_helper.phpapplication/helpers и настройка в config/autoload.php

Смежные вопросы