我在root' 组件'中创建了一个新目录。然后我把一个文件' ClassName.php '进入这个文件夹。声明名称空间namespace components;
和名为ClassName
的类现在我尝试使用它像
$c = new app\components\ClassName()
但是出现了错误。它说Class 'components\ClassName' not found
。
我在哪里错过了?我想我应该在include_path或类似的东西中添加文件夹组件。请帮助理解。
答案 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
中详细了解名称空间基础知识
答案 3 :(得分:0)
应该迟到但是我的客人我的解决方案可能会帮助一些人。我有同样的问题,解决方法如下: 如果要在应用程序中自动加载(导入)客户类,请执行以下操作:
然后你必须创建一个别名(别名是你给文件夹路径的快捷方式名称)。在我的例子中为我的文件夹核心创建一个别名(注意我也应该为我的组件文件夹创建一个别名),例如
Yii :: setAlias('core',dirname( DIR )。'/ core');
这个片段我把它放在我的common / config / boostrap.php文件中。因为yii2在运行时加载此文件。
现在您已准备好随时随地使用自定义类。只是做
$ utilities = new \ core \ Utilities();
希望这可能!!!!!!!