什么';CakePHP 2使用Traits和名称空间的正确方法是什么?
我正在使用CakePHP2.4.5和PHP5.5,并希望使用一个特性 我在Utility/variablestreal.php中有一个特性,叫做什么';CakePHP 2使用Traits和名称空间的正确方法是什么?,php,cakephp,namespaces,traits,Php,Cakephp,Namespaces,Traits,我正在使用CakePHP2.4.5和PHP5.5,并希望使用一个特性 我在Utility/variablestreal.php中有一个特性,叫做variablestreal 为了利用名称空间,我给了它一个名称空间App\Utility\variablestreat,因为Utility\variablestreat似乎有点过于全局,而前者在CakePHP 3中工作得更好 在我想要使用它的类中,我有use-App\Utility\variableStreat语句。对于备份,我还有一个App::use
variablestreal
为了利用名称空间,我给了它一个名称空间App\Utility\variablestreat
,因为Utility\variablestreat
似乎有点过于全局,而前者在CakePHP 3中工作得更好
在我想要使用它的类中,我有use-App\Utility\variableStreat类中的代码>语句。对于备份,我还有一个App::uses('variablestreat','Utility')文件顶部的代码>语句。我不确定在寻找特征时是否使用了SPL自动加载器,这就是为什么我首先选择名称空间
小问题是app目录是app
,由于目录结构应该匹配名称空间(我想),我将其重命名为app
。但是,CakeRequest::_base()硬编码app
,因此确定控制器的工作方式不太好
因此,我试图确定这是否是一个CakePHP错误,或者在CakePHP 2中是否有更合适的使用traits的方法。我的理解是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;
}
}
}
);
一种简单的方法是使用CakePHP添加包文件夹,然后根据您选择的名称引用它,例如:
将此添加到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);
您好,在命名空间中使用PHP中的单词无效。示例:名称空间项目\类\函数;//导致分析错误命名空间项目\Abstract\Factory;//导致分析错误命名空间App\Model\Entity\Trait\;//导致有效的分析错误,例如App\Model\Entity\AllTrait\