【问题标题】:Namespace with alias on Yii2 different from directory structureYii2 上具有别名的命名空间与目录结构不同
【发布时间】:2016-01-11 14:13:35
【问题描述】:

我做了一堆类并将它们放在目录common/a/b/c中。 所以,里面的文件

Class1.class.php

我有:

<?php
namespace x\y\b\c;
class Class1
...

命名空间不同于目录结构组织,因为我想要那样。 (x\y 应该映射到 common/a 目录) 在我的 common/config/bootstrap.php 我试过这个:

Yii::setAlias('common', dirname(__DIR__));
Yii::setAlias('x/y', '@common/a');

并尝试使用将此类导入另一个文件

use x\y\b\c\Class1;

没有成功。但如果我使用:

Yii::$classMap['x\y\b\c\Class1'] = __DIR__ . '/../../common/a/b/c/Class1.class.php';

代替 setAlias,它可以工作。

我想知道是否可以在不使用 composer 的情况下拥有与目录结构不同的命名空间,我该如何做到这一点,而不是映射 common/a/b/c

中的每个类

【问题讨论】:

  • 这对你有用吗,Yii::setAlias('x/y', dirname(__ DIR __).'/a'); ?将@common 更改为实际路径。
  • 我刚刚测试了这个,Yii2 仍然给我 yii\base\ErrorException - Class 'x\y\b\c\Class1' not found
  • 奇怪......它适用于我的本地主机。然后我会正确地写下答案
  • 它可以工作,但你的文件名应该是Class1.php。阅读更多:yiiframework.com/doc-2.0/guide-concept-autoloading.html

标签: namespaces yii2 alias


【解决方案1】:

在 bootstrap.php 中。

Yii::setAlias('common', dirname(__DIR__));
Yii::setAlias('x/y', dirname(__DIR__).'/models');

在我的“models”文件夹中,有文件夹“b”,文件夹“c”在文件夹“b”中。

models > b > c

我有一个名为“LoginForm.php”的模型文件,位于文件夹“c”中。 这个文件的顶部是这几行。

namespace x\y\b\c;
use Yii;
use yii\base\Model;
class LoginForm extends Model

在我的 SiteController 里面有这个。

use x\y\b\c\LoginForm;

在其中一个动作函数中,我可以成功调用这个模型。

$model = new LoginForm();

【讨论】:

  • 所以主要问题是我所有的文件都有@soju 提到的 .class. 后缀。删除它们后,一切正常(包括Yii::setAlias('x/y', '@common/a');。不再需要使用$classMap。我可以(按照你的例子)use yii\baseextends Model 工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2010-11-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
  • 2016-10-21
  • 2011-12-01
相关资源
最近更新 更多