2013-10-28 4 views
2

Мне нужно знать имя модуля для конкретной модели, если я знаю только имя модели.Получение имени модуля от имени модели

К примеру, у меня есть:

  • модель Branch, хранящаяся в protected/modules/office/models/branch.php и
  • модели BranchType хранящейся в protected/modules/config/models/branchtype.php.

Я хочу знать имя модуля branch.php от класса branchtype.php.

Как это сделать?

ответ

4

К сожалению Yii не предоставляет собственный метод, чтобы определить имя модуля, модель принадлежит. Вы должны написать свой собственный алгоритм для выполнения этой задачи.

Я могу предположить, вам два возможных метода:

  1. конфигурации хранилища для моделей модуля в классе модуля.
  2. Укажите имя вашей модели, используя путь псевдонимами

Первый метод:

MyModule.php:

class MyModule extends CWebModule 
{ 
    public $branchType = 'someType'; 
} 

Branch.php

class Branch extends CActiveRecord 
{ 
    public function init() // Or somewhere else 
    { 
     $this->type = Yii::app()->getModule('my')->branchType; 
    } 
} 

В конфигурации :

'modules' => 
    'my' => array(
     'branchType' => 'otherType', 
    ) 

Второй метод:

В конфигурации:

'components' => array(
    'modelConfigurator' => array(
     'models' => array(
      'my.models.Branch' => array(
       'type' => 'someBranch' 
      ), 
     ), 
    ), 
) 

Вы должны написать компонент ModelConfigurator, который будет хранить эту конфигурацию или возможно разобрать его в некотором роде. Затем вы можете сделать что-то вроде этого:

BaseModel.php:

class BaseModel extends CActiveRecord 
{ 
    public $modelAlias; 

    public function init() 
    { 
     Yii::app()->modelConfigurator->configure($this, $this->modelAlias); 
    } 
} 

Branch.PHP:

class Branch extends BaseModel 
{ 
    public $modelAlias = 'my.models.Branch'; 

    // Other code 
} 
2

Попробуйте это:

Yii::app()->controller->module->id. 

Или внутри контроллера:

$this->module->id 
+0

Вот только получить модуль текущей модели. Но я хочу получить другое имя модуля. – Thyu

+0

Как сказал Thyu, и это вызовет ошибку в консольных приложениях (в которых даже нет контроллера). – mmitchell

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