As extensões são pacotes de software redistribuíveis especialmente projetadas para serem usadas em aplicações Yii e fornecem recursos prontos para o uso. Por exemplo, a extensão yiisoft/yii2-debug adiciona uma barra de ferramentas de depuração na parte inferior de todas as páginas em sua aplicação para ajudar a compreender mais facilmente como as páginas são geradas. Você pode usar as extensões para acelerar o processo de desenvolvimento. Você também pode empacotar seus códigos como extensões para compartilhar com outras pessoas o seu bom trabalho.
Informação: Usamos o termo "extensão" para referenciar os pacotes de software específicos do Yii. Para propósito geral, os pacotes de software que podem ser usados sem o Yii, referenciamos sob o termo de "pacote" ou "biblioteca".
Para usar uma extensão, você precisa instalá-lo primeiro. A maioria das extensões são distribuídas como pacotes do Composer que podem ser instaladas seguindo dois passos:
composer.json
de sua aplicação e especifique quais
extensões (pacotes do Composer) você deseja instalar.composer install
para instalar as extensões especificadas.Observe que você pode precisa instalar o Composer caso você não tenha feito isto antes.
Por padrão, o Composer instala pacotes registados no Packagist - o maior repositório open source de pacotes do Composer. Você também pode criar o seu próprio repositório e configurar o Composer para usá-lo. Isto é útil caso você desenvolva extensões privadas que você deseja compartilhar apenas em seus projetos.
As extensões instaladas pelo Composer são armazenadas no diretório BasePath/vendor
,
onde o BasePath
refere-se ao caminho base
da aplicação. Como o Composer é um gerenciador de dependências, quando ele instala
um pacote, também instala todos os pacotes dependentes.
Por exemplo, para instalar a extensão yiisoft/yii2-imagine
, modifique seu
composer.json
conforme o seguinte exemplo:
{
// ...
"require": {
// ... other dependencies
"yiisoft/yii2-imagine": "~2.0.0"
}
}
Depois da instalação, você deve enxergar o diretório yiisoft/yii2-imagine
sob
o diretório BasePath/vendor
. Você também deve enxergar outro diretório
imagine/imagine
que contém os pacotes dependentes instalados.
Informação: O
yiisoft/yii2-imagine
é uma extensão nativa desenvolvida e mantida pela equipe de desenvolvimento do Yii. Todas as extensões nativas estão hospedadas no Packagist e são nomeadas comoyiisoft/yii2-xyz
, ondexyz
varia para cada extensão.
Agora, você pode usar as extensões instaladas como parte de sua aplicação. O
exemplo a seguir mostra como você pode usar a classe yii\imagine\Image
fornecido pela extensão yiisoft/yii2-imagine
:
use Yii;
use yii\imagine\Image;
// gera uma imagem thumbnail
Image::thumbnail('@webroot/img/test-image.jpg', 120, 120)
->save(Yii::getAlias('@runtime/thumb-test-image.jpg'), ['quality' => 50]);
Informação: As classes de extensão são carregadas automaticamente pela classe autoloader do Yii.
Em algumas raras ocasiões, você pode querer instalar algumas ou todas extensões manualmente, ao invés de depender do Composer. Para fazer isto, você deve:
vendor
Se uma extensão não tiver uma classe autoloader seguindo a
norma PSR-4, você pode usar a classe
autoloader fornecida pelo Yii para carregar automaticamente as classes de
extensão. Tudo o que você precisa fazer é declarar uma
alias root para o diretório root da
extensão. Por exemplo, assumindo que você instalou uma extensão no diretório
vendor/mycompany/myext
e que a classe da extensão está sob o namespace myext
,
você pode incluir o código a seguir na configuração de sua aplicação:
[
'aliases' => [
'@myext' => '@vendor/mycompany/myext',
],
]
Você pode considerar criar uma extensão quando você sentir a necessidade de compartilhar o seu bom código para outras pessoas. Uma extensão pode conter qualquer código que você deseja, tais como uma classe helper, um widget, um módulo, etc.
É recomendado que você crie uma extensão através do pacote doComposer de modo que possa ser mais facilmente instalado e usado por outros usuário, como descrito na última subseção.
Abaixo estão as básicas etapas que você pode seguir para criar uma extensão como um pacote do Composer.
composer.json
como
o requerido pelo Composer. Por favor, consulte a próxima subseção para mais
detalhes.composer.json
¶Cada pacote do Composer deve ter um arquivo composer.json
no diretório root. O
arquivo contém os metadados a respeito do pacote. Você pode achar a especificação
completa sobre este arquivo no Manual do Composer.
O exemplo a seguir mostra o arquivo composer.json
para a extensão yiisoft/yii2-imagine
:
{
// nome do pacote
"name": "yiisoft/yii2-imagine",
// tipo de pacote
"type": "yii2-extension",
"description": "The Imagine integration for the Yii framework",
"keywords": ["yii2", "imagine", "image", "helper"],
"license": "BSD-3-Clause",
"support": {
"issues": "https://github.com/yiisoft/yii2/issues?labels=ext%3Aimagine",
"forum": "https://forum.yiiframework.com/",
"wiki": "https://www.yiiframework.com/wiki/",
"irc": "ircs://irc.libera.chat:6697/yii",
"source": "https://github.com/yiisoft/yii2"
},
"authors": [
{
"name": "Antonio Ramirez",
"email": "amigo.cobos@gmail.com"
}
],
// dependências do pacote
"require": {
"yiisoft/yii2": "~2.0.0",
"imagine/imagine": "v0.5.0"
},
// especifica as classes autoloading
"autoload": {
"psr-4": {
"yii\\imagine\\": ""
}
}
}
Cada pacote do Composer deve ter um nome que identifica unicamente o pacote
entre todos os outros. Os nomes dos pacotes devem seguir o formato
vendorName/projectName
. Por exemplo, no nome do pacote yiisoft/yii2-imagine
,
o nome do vendor e o nome do projeto são yiisoft
e yii2-imagine
,
respectivamente.
NÃO utilize yiisoft
como nome do seu vendor já que ele é usado pelo Yii para
os códigos nativos.
Recomendamos que você use o prefixo yii2-
para o nome do projeto dos pacotes
de extensões em Yii 2, por exemplo, myname/yii2-mywidget
. Isto permitirá que
os usuários encontrem mais facilmente uma extensão Yii 2.
É importante que você especifique o tipo de pacote de sua extensão como
yii2-extension
, de modo que o pacote possa ser reconhecido como uma extensão
do Yii quando for instalado.
Quando um usuário executar composer install
para instalar uma extensão, o
arquivo vendor/yiisoft/extensions.php
será atualizada automaticamente para
incluir informações referentes a nova extensão. A partir deste arquivo, as
aplicações Yii podem saber quais extensões estão instaladas (a informação pode
ser acessada através da propriedade yii\base\Application::$extensions).
Sua extensão depende do Yii (claro!). Sendo assim, você deve listar (yiisoft/yii2
)
na entrada require
do composer.json
. Se sua extensão também depender de outras
extensões ou de bibliotecas de terceiros, você deve lista-los também. Certifique-se
de listar as constantes de versões apropriadas (por exemplo, 1.*
, @stable
)
para cada pacote dependente. Utilize dependências estáveis quando sua extensão
estiver em uma versão estável.
A maioria dos pacotes JavaScript/CSS são gerenciados pelo Bower
e/ou pelo NPM, ao invés do Composer. O Yii usa o
plugin de asset do Composer
para habilitar a gerência destes tipos de pacotes através do Composer. Se sua
extensão depender do pacote do Bower, você pode simplesmente listar a dependência
no composer.json
conforme o exemplo a seguir:
{
// package dependencies
"require": {
"bower-asset/jquery": ">=1.11.*"
}
}
O código anterior indica que a extensão depende do pacote jquery
do Bower. Em
geral, no composer.json
, você pode usar o bower-asset/PackageName
para
referenciar um pacote do Bower no composer.json
, e usar o npm-asset/PackageName
para referenciar um pacote do NPM, por padrão o conteúdo do pacote será instalado
sob os diretórios @vendor/bower/PackageName
e @vendor/npm/Packages
,
respectivamente.
Estes dois diretórios podem ser referenciados para usar alias mais curtas como
@bower/PackageName
e @npm/PackageName
.
Para mais detalhes sobre o gerenciamento de asset, por favor, consulte a seção Assets.
Para que suas classes sejam carregadas automaticamente pela classe autoloader do
Yii ou da classe autoloader do Composer, você deve especificar a entrada autoload
no arquivo composer.json
, conforme mostrado a seguir:
{
// ....
"autoload": {
"psr-4": {
"yii\\imagine\\": ""
}
}
}
Você pode listar um ou vários namespaces e seus caminhos de arquivos correspondentes.
Quando a extensão estiver instalada em uma aplicação, o Yii irá criar para cada
namespace listada uma alias que se
referenciará ao diretório correspondente ao namespace.
Por exemplo, a declaração acima do autoload
corresponderá a uma alias chamada
@yii/imagine
.
Como as extensões são destinadas a serem usadas por outras pessoas, você precisará, por muitas vezes, fazer um esforço extra durante o desenvolvimento. A seguir, apresentaremos algumas práticas comuns e recomendadas na criação de extensões de alta qualidade.
Para evitar conflitos de nomes e criar classes autocarregáveis em sua extensão, você deve usar namespaces e nomear as classes seguindo o padrão PSR-4 ou o padrão PSR-0.
Seus namespaces de classes devem iniciar com vendorName\extensionName
, onde a
extensionName
é semelhante ao nome da extensão, exceto que ele não deve conter
o prefixo yii2-
. Por exemplo, para a extensão yiisoft/yii2-imagine
, usamos o
yii\imagine
como namespace para suas classes.
Não use yii
, yii2
ou yiisoft
como nome do seu vendor. Estes nomes são
reservados para serem usados para o código nativo do Yii.
As vezes, você pode querer que sua extensão execute algum código durante o
processo de inicialização de uma aplicação. Por
exemplo, a sua extensão pode querer responder ao evento beginRequest
da
aplicação para ajustar alguma configuração do ambiente. Embora você possa
instruir os usuários que usam a extensão para associar explicitamente a sua
função ao evento beginRequest
, a melhor maneira é fazer isso é automaticamente.
Para atingir este objetivo, você pode criar uma classe de inicialização implementando o yii\base\BootstrapInterface. Por exemplo,
namespace myname\mywidget;
use yii\base\BootstrapInterface;
use yii\base\Application;
class MyBootstrapClass implements BootstrapInterface
{
public function bootstrap($app)
{
$app->on(Application::EVENT_BEFORE_REQUEST, function () {
// fazer alguma coisa aqui
});
}
}
Em seguida, liste esta classe no arquivo composer.json
de sua extensão conforme
o seguinte,
{
// ...
"extra": {
"bootstrap": "myname\\mywidget\\MyBootstrapClass"
}
}
Quando a extensão for instalada em uma aplicação, o Yii instanciará automaticamente a classe de inicialização e chamará o método bootstrap() durante o processo de inicialização para cada requisição.
Sua extensão pode precisar acessar banco de dados. Não pressupunha que as
aplicações que usam sua extensão SEMPRE usam o Yii::$db
como a conexão do
banco de dados. Em vez disso, você deve declarar a propriedade db
para as
classes que necessitam acessar o banco de dados.
A propriedade permitirá que os usuários de sua extensão personalizem quaisquer
conexão de banco de dados que gostariam de usar.
Como exemplo, você pode consultar a classe yii\caching\DbCache e ver como
declara e usa a propriedade db
.
Se sua extensão precisar criar uma tabela específica no banco de dados ou fazer alterações no esquema do banco de dados, você deve:
Se sua extensão usar um widget ou um módulo, pode ter grandes chances de requerer algum assets para funcionar. Por exemplo, um módulo pode exibir algumas páginas que contém imagens, JavaScript e CSS. Como os arquivos de uma extensão estão todos sob o diretório que não é acessível pela Web quando instalado em uma aplicação, você tem duas escolhas para tornar estes arquivos de asset diretamente acessíveis pela Web:
Recomendamos que você use a segunda abordagem de modo que sua extensão possa ser usada com mais facilidade pelos usuários. Por favor, consulte a seção Assets para mais detalhes sobre como trabalhar com assets em geral.
Sua extensão pode ser usada por aplicações que suportam diferentes idiomas! Portanto, se sua extensão exibir conteúdo para os usuários finais, você deve tentar usar internacionalização e localização. Em particular,
Yii::t()
de modo que eles possam ser traduzidas. As
mensagens voltadas para os desenvolvedores (como mensagens internas de exceções)
não precisam ser traduzidas.Para mais detalhes, por favor, consulte a seção Internacionalização.
Você quer que sua extensão execute com perfeição sem trazer problemas para outras pessoas. Para alcançar este objetivo, você deve testar sua extensão antes de liberá-lo ao público.
É recomendado que você crie várias unidades de testes para realizar simulações no código de sua extensão ao invés de depender de testes manuais. Toda vez que liberar uma nova versão de sua extensão, você pode simplesmente rodar as unidades de teste para garantir que tudo esteja em boas condições. O Yii fornece suporte para testes, que podem ajuda-los a escrever mais facilmente testes unitários, testes de aceitação e testes funcionais. Para mais detalhes, por favor, consulte a seção Testing.
Você deve dar para cada liberação de sua extensão um numero de versão (por exemplo,
1.0.1
). Recomendamos que você siga a prática versionamento semântico
ao determinar qual número de versão será usado.
Para que outras pessoas saibam sobre sua extensão, você deve liberá-lo ao público.
Se é a primeira vez que você está liberando uma extensão, você deve registrá-lo
no repositório do Composer, como o Packagist. Depois
disso, tudo o que você precisa fazer é simplesmente criar uma tag de liberação
(por exemplo, v1.0.1
) no repositório CVS de sua extensão e notificar o
repositório do Composer sobre a nova liberação. As pessoas, então, serão capazes
de encontrar a nova versão e instalá-lo ou atualizá-lo através do repositório do
Composer.
As versões de sua extensão, além dos arquivos de códigos, você deve também considerar a inclusão de roteiros para ajudar as outras pessoas aprenderem a usar a sua extensão:
readme.md
.changelog.md
.upgrade.md
.Informação: Os seus comentários no código podem ser escritos no formato Markdown. A extensão
yiisoft/yii2-apidoc
fornece uma ferramenta para gerar uma documentação da API com base nos seus comentários.
Informação: Embora não seja um requisito, sugerimos que sua extensão se conforme a determinados estilos de codificação. Você pode consultar o estilo de codificação do framework.
O Yii fornece as seguintes extensões que são desenvolvidas e mantidas pela equipe de desenvolvimento do Yii. Todos são registrados no Packagist e podem ser facilmente instalados como descrito na subseção Usando Extensões.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.