Módulo

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 aplicalçã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.

1. Criando um Módulo

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ó podemos usar o gerador de módulos do Gii para criar o esqueleto básico de um novo módulo.

2. Usando Módulos

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 que PostController esteja sob forum/controllers/admin, nós podemos fazer uma referência à ação create usando forum/admin/post/create.

3. Módulo Aninhado

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 folho. 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.

$Id$

Be the first person to leave a comment

Please to leave your comment.