类自动装载机Yii2

时间:2014-12-25 07:02:08

标签: php yii2

我在root' 组件'中创建了一个新目录。然后我把一个文件' ClassName.php '进入这个文件夹。声明名称空间namespace components;和名为ClassName的类现在我尝试使用它像

$c = new app\components\ClassName()

但是出现了错误。它说Class 'components\ClassName' not found。 我在哪里错过了?我想我应该在include_path或类似的东西中添加文件夹组件。请帮助理解。

4 个答案:

答案 0 :(得分:2)

我找到了解决方案。

添加

Yii::setAlias('components', dirname(dirname(\__DIR__)) . '/components');

在className.php中:

namespace components;

然后用法:

$c = new components\ClassName();

答案 1 :(得分:2)

这是您在Yii2(基本应用程序)

中创建自定义组件的方法

在应用程序的根目录中创建名为“components”的文件夹。 然后使用适当的命名空间为组件创建一个类,并扩展Component类:

namespace app\components;
use yii\base\Component;

class MyComponent extends Component {

    public function testMethod() {
        return 'test...';
    }
}

在config / web.php文件中添加组件:

'components' => [
    // ...
    'mycomponent' => [
        'class' => 'app\components\MyComponent'
    ]
]

现在您可以像这样访问您的组件:

Yii::$app->mycomponent->testMethod();

答案 2 :(得分:1)

ClassName.php

namespace app\components;

<强>加

当您创建新的ClassName实例时,如果您当前的命名空间不是全局的,请不要忘记命名空间(AKA完全限定命名空间)的前导反斜杠,因为在这种情况下,命名空间将被视为relative(与UNIX路径一样),使用:

$c = new \app\components\ClassName();  //If your current namespace is app\controllers or app\models etc.
$c = new app\components\ClassName();  //If your current namespace is global namespace

您可以在PHP documentation

中详细了解名称空间基础知识

答案 3 :(得分:0)

应该迟到但是我的客人我的解决方案可能会帮助一些人。我有同样的问题,解决方法如下: 如果要在应用程序中自动加载(导入)客户类,请执行以下操作:

  • 创建你想要的课程,例如在我的情况下,我创建了common / core / Utilities.php
  • 然后你必须创建一个别名(别名是你给文件夹路径的快捷方式名称)。在我的例子中为我的文件夹核心创建一个别名(注意我也应该为我的组件文件夹创建一个别名),例如

    Yii :: setAlias('core',dirname( DIR )。'/ core');

这个片段我把它放在我的common / config / boostrap.php文件中。因为yii2在运行时加载此文件。

  • 现在您已准备好随时随地使用自定义类。只是做

    $ utilities = new \ core \ Utilities();

希望这可能!!!!!!!