Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';CakePHP 2使用Traits和名称空间的正确方法是什么?_Php_Cakephp_Namespaces_Traits - Fatal编程技术网

什么';CakePHP 2使用Traits和名称空间的正确方法是什么?

什么';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

我正在使用CakePHP2.4.5和PHP5.5,并希望使用一个特性

我在Utility/variablestreal.php中有一个特性,叫做
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\