Intereting Posts
Как я могу заставить функцию php cos вернуть правильное значение? PHP: определенные значения времени / даты не помечены как конфликты (большинство других, хотя) Выбор списка игнорирует первое значение при использовании функции onchange, PHP, JAVASCRIPT Использование формулы Хаверсина с PostgreSQL и PDO Как проверить, содержит ли многомерный массив только пустые значения? значение максимального значения foreach? CakePHP 3 загрузки файлов поставщиков Как преобразовать динамически построенный запрос ext / mysql в подготовленный отчет PDO? SMTP-соединение работает с локальной машины, но не с хостинга GoDaddy. Один и тот же smtp-сервер, используемый Производительность цикла для PHP в PHP Пытаться отобразить адрес сущности из базы данных с веточкой Преобразование <br /> в новую строку для использования в текстовой области Почему я получаю Undefined index: ошибка HTTP_HOST? Список всех возможных ошибок PHP Переписывание URL-адресов с помощью PHP

Каков правильный метод использования черт и пространств имен для CakePHP 2?

Я использую CakePHP 2.4.5 и PHP 5.5 и хотел бы использовать черту.

У меня есть черта в Utility / VariablesTrait.php под названием VariablesTrait .

Чтобы воспользоваться преимуществами пространств имен, я дал им пространство имен App\Utility\VariablesTrait , так как Utility\VariablesTrait кажется немного слишком глобальным, и первое будет работать лучше с CakePHP 3.

В моем классе, в котором я хочу использовать его, у меня есть use App\Utility\VariablesTrait; в классе. Для резервного копирования у меня также есть App::uses('VariablesTrait', 'Utility'); в верхней части файла. Я не уверен, используется ли автозагрузчик SPL при поиске признаков, и именно поэтому я собирался использовать пространства имен.

Небольшая проблема заключается в том, что каталог приложения – это app , и поскольку структуры каталогов должны совпадать с пространствами имен (я думаю), я переименовал его в App . Тем не менее, приложение CakeRequest :: _ base () hardcodes, поэтому определение контроллера не так хорошо работает.

Итак, я пытаюсь определить, является ли это ошибкой CakePHP, или если есть более подходящий способ использования признаков в CakePHP 2.

Легкий способ сделать это – использовать CakePHP build для добавления папки вашего пакета, а затем просто ссылаться на нее по имени, которое вы выбрали так:

Добавьте это в bootstrap.php :

 /** * Add New Package Locations */ App::build(['Controller/Trait' => [APP . 'Controller' . DS . 'Trait' . DS]], App::REGISTER); 

Тогда просто используйте это, чтобы потянуть свои черты:

 App::uses('TestTrait', 'Controller/Trait'); 

Вы также можете добавить несколько папок пакетов за раз, чтобы вы могли сделать что-то вроде этого:

 /** * Add New Package Locations */ App::build(['All/Trait' => [ APP . 'Controller' . DS . 'Trait' . DS, APP . 'Model' . DS . 'Trait' . DS, APP . 'Lib' . DS . 'Trait' . DS ]], App::REGISTER); 

Я понимаю, что CakePHP не загружается автоматически. Для импорта классов с именами я использую следующее:

 spl_autoload_register( function ( $class ) { foreach ( App::path('Vendor', 'MyFile') as $base ) { $path = $base . str_replace('\\', DS, $class) . '.php'; if ( file_exists($path) ) { return include $path; } } } );