2013-10-28 158 views
2

如果我只知道模型的名稱,我需要知道特定模型的模塊名稱。從模型名稱中獲取模塊名稱

例如,我有:

  • 模型Branch,存儲在protected/modules/office/models/branch.php並存儲在protected/modules/config/models/branchtype.php
  • 模型BranchType

我想知道類branchtype.php的模塊名稱branch.php

如何做到這一點?

回答

4

不幸的Yii不提供任何本地方法來確定模型屬於模塊名稱。你必須編寫自己的算法來完成這項任務。

我可以假設你兩種可能的方法:

  1. 在模塊類模塊的型號存儲配置。

    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; 
        } 
    } 
    

    在配置

  2. 使用路徑別名

第一種方法提供模型的名稱:

'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); 
    } 
} 

分公司。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