Um módulo é uma unidade de software independente que consiste de modelos, visões, controles e outros componentes auxiliares. em muitos aspectos, um módulo lembra uma aplicação. A principal diferença é que um módulo não pode ser implantado sozinho e ele deve residir em uma aplicação. Usuários podem acessar os controles em um módulo da mesma maneira que o fazem com controles normais de uma aplicação.
Módulos são úteis em vários cenários. Para uma aplicação de grande escala, nós podemos dividí-la em vários módulos, cada um deles desenvolvido e mantido separadamente. Algumas funcionalidades comumente usadas, como o gerenciamento de usuários e o gerenciamento de comentário podem ser desenvolvidas em módulos para que elas possam ser facilmente reutilizadas em projetos futuros.
Um módulo é organizado como um diretório cujo nome serve como a sua ID única. A estrutura do diretório de um módulo é similar ao do diretório base da aplicação. Está apresentado abaixo o layout típico da estrutura do diretório de um módulo de nome forum
:
forum/ ForumModule.php o arquivo de classe do módulo components/ contém os componentes reutilizáveis do usuário views/ contém os arquivos de visão para os widgets controllers/ contém as classes dos controles DefaultController.php o arquivo de classe do controle padrão extensions/ contém extensões de terceiros models/ contém os arquivos de classe dos modelos views/ contém as visões dos controles e os arquivos de layout layouts/ contém os arquivos das visões de layout default/ contém os arquivos das visões do controle padrão index.php o arquivo da visão "index"
Um módulo deve ter uma classe de módulo que estende de CWebModule. O nome da classe é determinado usando a expressão ucfirst($id).'Module'
, onde $id
refere-se à ID do módulo (ou ao nome do diretório do módulo). Esta classe de módulo serve como o local central para o armazenamento de informações compartilhadas pelo código do módulo. Por exemplo, nós podemos usar CWebModule::params para armazenar os parâmetros do módulo, e usar CWebModule::components para compartilhar os componentes da aplicação no nível do módulo.
Dica: Nós podemos usar o gerador de módulos do Gii para criar o esqueleto básico de um novo módulo.
Para usar um módulo, primeiro coloque o diretório do módulo sub o diretório modules
do diretório base da aplicação. Então declare a ID do módulo na propriedade modules da aplicação. Por exemplo, para usar o módulo forum
acima, nós podemos usar a seguinte configuração de aplicação:
return array(
......
'modules'=>array('forum',...),
......
);
Um módulo pode também ser configurado com valores iniciais para as suas propriedades. Isto é muito similar a configurar componentes da aplicação. Por exemplo, o módulo forum
pode ter uma propriedade chamada postPerPage
na sua classe de módulo que pode ser configurada na configuração da aplicação como se segue:
return array(
......
'modules'=>array(
'forum'=>array(
'postPerPage'=>20,
),
),
......
);
A instância do módulo pode ser acessada através da propriedade module do controle atualmente ativo. Através da instância do módulo, nós podemos então acessar as informações que são compartilhadas no nível do módulo. Por exemplo, para acessar a informação em postPerPage
acima, nós podemos usar a seguinte expressão:
$postPerPage=Yii::app()->controller->module->postPerPage;
// ou o seguinte se $this refere-se a uma instância de um controle
// $postPerPage=$this->module->postPerPage;
A ação de um controle em um módulo pode ser acessada usando a rota móduloID/controleID/açãoID
. Por exemplo, assumindo que o módulo forum
acima tenha um controle chamado PostController
, nós podemos usar a rota forum/post/create
para fazer referência à ação create
neste controle. A URL correspondente a esta rota seria http://www.example.com/index.php?r=forum/post/create
.
Dica: Se um controle está em um subdiretório de
controllers
, nós ainda podemos usar o formato de rota acima. Por exemplo. assumindo quePostController
esteja sobforum/controllers/admin
, nós podemos fazer uma referência à açãocreate
usandoforum/admin/post/create
.
Módulos podem ser aninhados em níveis ilimitados. Isto quer dizer que um módulo pode conter outro módulo, que pode conter outro módulo, que pode conter ainda outro módulo. Nós podemos chamar o o primeiro deles de módulo pai e o último deles de módulo filho. Um módulo filho deve ser declarado na propriedade modules do seu módulo pai, da mesma maneira que declaramos módulos na configuração da aplicação, como mostrado acima.
Para acessar uma ação de um controle em um módulo filho, nós podemos usar a rota móduloPaiID/móduloFilhoID/controleID/açãoID
.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.