2016-01-11 4 views
1

Я сделал кучу классов и поместил их в каталог common/a/b/c. Так, внутри файлаПространство имен с псевдонимом на Yii2 отличается от структуры каталогов

Class1.class.php

У меня есть:

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

пространство имен отличается от структуры каталога организации, потому что хотел таким образом. (х \ у должен отображаться общих/директорий) На моей общей/конфигурации/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 ​​, это работает.

Интересно, если это возможно, чтобы иметь пространство имен, отличные от структуры каталогов без использования композитора, и как я могу сделать это вместо отображения каждого класса внутри общих/а/б/с

+0

будет ли это работать для вас, Yii :: setAlias ​​('x/y', dirname (__ DIR __). '/ A'); ? изменить @common на фактический путь. – Hanafi

+0

Я только что проверил это, и Yii2 все еще дает мне yii \ base \ ErrorException - класс 'x \ y \ b \ c \ Class1' не найден – StackUnder

+0

странно ... он работает на моем localhost. я напишу как ответ правильно, тогда – Hanafi

ответ

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(); 
+1

Итак, основная проблема заключалась в том, что все мои файлы имели суффикс **. Class. **, упомянутый @soju. После их удаления все работало нормально (в том числе 'Yii :: setAlias ​​('x/y', '@ common/a');' Нет необходимости использовать $ classMap больше. И я могу просто сделать (после вашего примера) 'use yii \ base' и' extends Model' работает отлично. – StackUnder

Смежные вопросы