4

如果我只知道模型的名称,我需要知道特定模型的模块名称。

例如,我有:

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

我想知道branch.php.branchtype.php

这个怎么做?

4

3 回答 3

5

不幸的是,Yii 没有提供任何本地方法来确定模型所属的模块名称。您必须编写自己的算法来完成此任务。

我可以假设你有两种可能的方法:

  1. 将模块模型的配置存储在模块类中。
  2. 使用路径别名提供模型的名称

第一种方法:

我的模块.php:

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

分支.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 来存储此配置或以某种方式对其进行解析。然后你可以做这样的事情:

基本模型.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
}
于 2013-10-28T08:51:15.787 回答
3

尝试这个:

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

或在控制器内部:

$this->module->id
于 2013-10-28T08:20:48.303 回答
0

在 Yii2 中试试这个:

echo Yii::$app->controller->module->id;

有关详细信息,请参阅获取当前控制器名称、操作、模块

于 2016-10-06T08:55:40.447 回答