CakePHP 2.X - загрузка пользовательского класса в папку app/lib

У меня есть класс под названием MyClass. Он находится в app/Lib/MyDir/MyClass. Я хотел бы использовать App:uses() для его загрузки, но не могу заставить его работать.

В CakePHP 1.3 я бы загружал его через:

App::import('Lib', 'MyDir/MyClass');  //this still works in CakePHP 2.1

В CakePHP 2.1 я пытаюсь сделать:

App::uses('MyClass', 'Lib/MyDir');

Когда я пытаюсь «обновить» MyClass, я получаю, что класс «MyClass» не найден.

Разве нельзя использовать App::uses в пользовательских классах Lib? Я не могу продолжать использовать App::import(), потому что если 'App::import('Lib', 'MyDir/MyClass');' появляется 2 раза в пути кода. Я получаю ошибку «Невозможно повторно объявить класс» в lib/Cake/Core/App.php в строке 531.

Что я делаю неправильно?

Изменить: поэтому, если я делаю App::uses('MyClass', 'MyDir'); оно работает. Не уверен, что так должно быть, но сообщаю об ошибке.


person rynop    schedule 08.02.2012    source источник
comment
Я нашел следующую фиксацию, которая должна решить проблему (сделает так, чтобы мое использование выше работало). Как только он попадет в релиз, я обновлю этот вопрос. github.com/cakephp/cakephp/commit/   -  person rynop    schedule 09.02.2012
comment
кто бы это ни гуглил, убедитесь, что файл содержит класс с таким же именем. дополнительная информация в этом ответе   -  person aexl    schedule 15.05.2016


Ответы (1)


ты пробовал

App::uses('MyClass', 'MyDir');

? поскольку сам "Lib" можно рассматривать как базовый каталог

PS: вы даже должны сгруппировать все внутри Lib в подпапки (пакеты), аналогичные ядру.

person mark    schedule 08.02.2012
comment
Да, это работает. Но это не кажется интуитивно понятным. book.cakephp.org/2.0/en В /core-utility-libraries/ даже есть пример для «Lib». Да, я пытаюсь поместить все в подпапки. Допустим, у меня не было класса в каталоге Lib в подпапке (он был просто в app/Lib/MyClass.php) — я не смог бы загрузить его с помощью ::uses()? - person rynop; 09.02.2012
comment
Да, вы. это не просто App::uses('MyClass', 'Lib'); но следует избегать :) - person mark; 09.02.2012
comment
Я работаю в версии cakephp 2.5.4. Мне нужно импортировать один класс Lib в другой класс Lib. например: у меня есть класс Search.php в папке Lib и GooglePlus.php в папке Lib/Google. Мне нужно использовать файл GooglePlus.php в Search.php, но он не работает. Я также попробовал функцию app:build, описанную в book.cakephp.org. /2.0/en/core-utility-libraries/app.html, чтобы зарегистрировать класс Lib. Как использовать один класс lib в другом? или если это невозможно, какой альтернативный подход для этого? - person Dashrath; 19.12.2014
comment
Это возможно именно так, как я описал выше: всегда используйте App::uses() для всех классов, которые вы используете в начале каждого файла, и все будет работать нормально. - person mark; 19.12.2014