Phpdocs completos, diretamente da fonte
Este pacote gera arquivos auxiliares que permitem ao seu IDE fornecer conclusão precisa. A geração é feita com base nos arquivos do seu projeto, para que eles estejam sempre atualizados.
A ramificação 3.x suporta Laravel 10 e 11. Para a versão mais antiga, use as liberações 2.x.
Requer este pacote com o compositor usando o seguinte comando:
composer require --dev barryvdh/laravel-ide-helper
Observação
Se você encontrar a versão em conflito com a doutrina/dbal, tente: composer require --dev barryvdh/laravel-ide-helper --with-all-dependencies
Este pacote utiliza o mecanismo de descoberta automática de pacote Laravels, o que significa que, se você não instalar dependências de dev na produção, ele também não será carregado.
Se, por algum motivo, você deseja controlar manualmente isso:
extra.laravel.dont-discover
Key em composer.json
, por exemplo, "extra" : {
"laravel" : {
"dont-discover" : [
" barryvdh/laravel-ide-helper "
]
}
}
providers
em config/app.php
: Barryvdh LaravelIdeHelper IdeHelperServiceProvider ::class,
AppServiceProvider
com o método register()
: public function register ()
{
if ( $ this -> app -> isLocal ()) {
$ this -> app -> register ( Barryvdh LaravelIdeHelper IdeHelperServiceProvider ::class);
}
// ...
}
Nota: Evite o cache da configuração em seu ambiente de desenvolvimento, isso pode causar problemas após a instalação deste pacote; respectivamente, limpe o cache de antemão via
php artisan cache:clear
se você encontra problemas ao executar os comandos
Confira este vídeo Laracasts para uma rápida introdução/explicação!
php artisan ide-helper:generate
- PhpDoc Generation for Laravel Facadasphp artisan ide-helper:models
- PhpDocs para modelosphp artisan ide-helper:meta
- Phpstorm Meta FileNOTA: Você precisa de complicação de codificina para o texto sublime: https://github.com/spectacles/codecomplique
Agora você pode gerar novamente os documentos (para atualizações futuras)
php artisan ide-helper:generate
Nota: bootstrap/compiled.php
deve ser limpo primeiro, então execute php artisan clear-compiled
antes de gerar.
Isso gerará o arquivo _ide_helper.php
, que deve ser analisado adicionalmente pelo seu IDE para preenchimento automático. Você pode usar o filename
de configuração para alterar seu nome.
Você pode configurar seu composer.json
para fazer isso cada vez que atualizar suas dependências:
"scripts" : {
"post-update-cmd" : [
"Illuminate\Foundation\ComposerScripts::postUpdate" ,
"@php artisan ide-helper:generate" ,
"@php artisan ide-helper:meta"
]
} ,
Você também pode publicar o arquivo de configuração para alterar as implementações (por exemplo, interface para classe específica) ou definir padrões para --helpers
.
php artisan vendor:publish --provider= " BarryvdhLaravelIdeHelperIdeHelperServiceProvider " --tag=config
O gerador tenta identificar a classe real, mas se não puder ser encontrada, você poderá defini -lo no arquivo de configuração.
Algumas classes precisam de uma conexão de banco de dados em funcionamento. Se você não tiver uma conexão de trabalho padrão, algumas fachadas não serão incluídas. Você pode usar um driver sqlite na memória adicionando a opção -M
.
Se você usar fachadas em tempo real em seu aplicativo, elas também serão incluídas no arquivo gerado usando uma anotação @mixin
e estendendo a classe original sob a fachada.
Nota : Este recurso usa os arquivos fachadas em tempo real gerado na pasta storage/framework/cache
. Esses arquivos são gerados sob demanda ao usar a fachada em tempo real; portanto, se a estrutura não gerou isso primeiro, ela não será incluída no arquivo auxiliar. Execute a rota/comando/código primeiro e depois regenere o arquivo auxiliar e desta vez a fachada em tempo real será incluída nele.
Você pode optar por incluir arquivos auxiliares. Isso não está ativado por padrão, mas você pode substituí-lo pela opção --helpers (-H)
. O Illuminate/Support/helpers.php
já está configurado, mas você pode adicionar/remover seus próprios arquivos no arquivo de configuração.
Este pacote pode gerar phpdocs para macros e mixins, que serão adicionados ao arquivo _ide_helper.php
.
Mas isso só funciona se você usar o tipo de engate ao declarar uma macro.
Str :: macro ( ' concat ' , function ( string $ str1 , string $ str2 ) : string {
return $ str1 . $ str2 ;
});
Se você não quiser escrever suas propriedades, pode usar o comando php artisan ide-helper:models
para gerar phpdocs, com base em colunas de tabela, relações e getters/setters.
Nota: Este comando requer uma conexão de banco de dados de trabalho para introspectar a tabela de cada modelo
Por padrão, você é solicitado a substituir ou gravar em um arquivo separado ( _ide_helper_models.php
). Você pode gravar os comentários diretamente no seu arquivo de modelo, usando a opção --write (-W)
ou force para não escrever com --nowrite (-N)
.
Como alternativa, o uso da opção --write-mixin (-M)
adicionará apenas uma tag de mixin ao seu arquivo de modelo, escrevendo o restante em ( _ide_helper_models.php
). O nome da classe será diferente do modelo, evitando o aborrecimento duplicado do IDE.
Certifique -se de fazer backup de seus modelos, antes de escrever as informações.
Escrever para os modelos deve manter os comentários existentes e apenas anexar novas propriedades/métodos. Não atualizará propriedades/métodos alterados.
Com a opção --reset (-R)
, todo o PHPDOC existente é substituído, incluindo quaisquer comentários que tenham sido feitos.
php artisan ide-helper:models " AppModelsPost "
/**
* AppModelsPost
*
* @property integer $id
* @property integer $author_id
* @property string $title
* @property string $text
* @property IlluminateSupportCarbon $created_at
* @property IlluminateSupportCarbon $updated_at
* @property-read User $author
* @property-read IlluminateDatabaseEloquentCollection|Comment[] $comments
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost newModelQuery()
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost newQuery()
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost query()
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost whereTitle($value)
* @method static IlluminateDatabaseEloquentBuilder<static>|AppModelsPost forAuthors(User ...$authors)
* …
*/
Com a opção --write-mixin (-M)
/**
* …
* @mixin IdeHelperPost
*/
Por padrão, os modelos em app/models
são digitalizados. O argumento opcional informa quais modelos usar (também fora do aplicativo/modelos).
php artisan ide-helper:models " AppModelsPost " " AppModelsUser "
Você também pode digitalizar um diretório diferente, usando a opção --dir
(relativa do caminho base):
php artisan ide-helper:models --dir= " path/to/models " --dir= " app/src/Model "
Você pode publicar o arquivo de configuração ( php artisan vendor:publish
) e definir os diretórios padrão.
Os modelos podem ser ignorados usando a opção --ignore (-I)
php artisan ide-helper:models --ignore= " AppModelsPost,AppModelsUser "
Ou pode ser ignorado definindo a configuração ignored_models
' ignored_models ' => [
App Post ::class,
Api User ::class
],
where*
métodos O eloqüente permite ligar where<Attribute>
em seus modelos, por exemplo, Post::whereTitle(…)
e traduz automaticamente isso para Post::where('title', '=', '…')
.
Se, por algum motivo, não for inspirado em gerar (um para cada coluna), você poderá desativar isso via configuração write_model_magic_where
e configurando -o como false
.
*_count
Properties Você pode usar o método ::withCount
para contar os resultados do número de um relacionamento sem realmente carregá -los. Esses resultados são então colocados em atributos após a Convenção <columname>_count
.
Por padrão, esses atributos são gerados no PHPDOC. Você pode desligá -los configurando o config write_model_relation_count_properties
como false
.
O Laravel 9 introduziu anotações genéricas em docblocks para coleções. Phpstorm 2022.3 e acima suporta o uso de anotações genéricas nas declarações @property
e @property-read
em docblocks, por exemplo, Collection<User>
em vez de Collection|User[]
.
Estes podem ser desativados definindo o config use_generics_annotations
como false
.
@comment
com base no docblock Para melhor suportar IDEs, as relações e getters/setters também podem adicionar um comentário a uma propriedade como colunas de tabela. Portanto, é usado um Docblock @comment
personalizado:
class Users extends Model
{
/**
* @comment Get User's full name
*
* @return string
*/
public function getFullNameAttribute (): string
{
return $ this -> first_name . ' ' . $ this -> last_name ;
}
}
// => after generate models
/**
* AppModelsUsers
*
* @property-read string $full_name Get User's full name
* …
*/
Um novo método para os modelos eloquentes foi adicionado chamado Referência newEloquentBuilder
, onde podemos adicionar suporte para criar uma nova classe dedicada em vez de usar escopos locais no próprio modelo.
Se, por algum motivo, não for inspirado em gerar (um para cada coluna), você poderá desativar isso via config write_model_external_builder_methods
e configurando -o como false
.
Se você estiver usando relacionamentos não incorporados ao Laravel, precisará especificar o nome e retornar a classe na configuração para obter a geração adequada.
' additional_relation_types ' => [
' externalHasMany ' => My Package externalHasMany::class
],
Os relacionamentos encontrados normalmente geram um valor de retorno com base no nome do relacionamento.
Se seus relacionamentos personalizados não seguirem esse esquema de nomeação tradicional, você poderá definir seu tipo de retorno manualmente. As opções disponíveis são many
e morphTo
.
' additional_relation_return_types ' => [
' externalHasMultiple ' => ' many '
],
Se você precisar de informações adicionais sobre seu modelo de fontes que não são tratadas por padrão, poderá conectar -se ao processo de geração com ganchos de modelo para adicionar informações extras em tempo real. Basta criar uma classe que implementa ModelHookInterface
e adicione -a à matriz model_hooks
na configuração:
' model_hooks ' => [
MyCustomHook ::class,
],
O método run
será chamado durante a geração para cada modelo e receber o atual ModelsCommand
e o Model
atual, por exemplo:
class MyCustomHook implements ModelHookInterface
{
public function run ( ModelsCommand $ command , Model $ model ): void
{
if (! $ model instanceof MyModel ) {
return ;
}
$ command -> setProperty ( ' custom ' , ' string ' , true , false , ' My custom property ' );
$ command -> unsetMethod ( ' method ' );
$ command -> setMethod ( ' method ' , $ command -> getMethodType ( $ model , ' SomeClass ' ), [ ' $param ' ]);
}
}
/**
* MyModel
*
* @property integer $ id
* @property-read string $ custom
Se você precisar de suporte de phpdocs para métodos fluentes na migração, por exemplo
$ table -> string ( " somestring " )-> nullable ()-> index ();
Após a publicação do fornecedor, basta alterar a linha include_fluent
em seu arquivo config/ide-helper.php
em:
' include_fluent ' => true ,
Em seguida, execute php artisan ide-helper:generate
, agora você verá todos os métodos fluentes reconhecidos pelo seu IDE.
Se você deseja que os métodos factory()->create()
e factory()->make()
retornem a classe de modelo correta, você pode permitir que os construtores de fábrica personalizados com a linha config/ide-helper.php
include_factory_builders
. Descontinuado para o Laravel 8 ou mais recente.
' include_factory_builders ' => true ,
Para que isso funcione, você também deve publicar o arquivo meta phpstorm (veja abaixo).
É possível gerar um arquivo de meta phpstorm para adicionar suporte ao padrão de design de fábrica. Para o Laravel, isso significa que podemos fazer com que o phpstorm entenda que tipo de objeto estamos resolvendo a partir do contêiner do COI. Por exemplo, events
retornarão um objeto IlluminateEventsDispatcher
; portanto, com o arquivo meta que você pode chamar de app('events')
e ele preencherá automaticamente os métodos do Dispatcher.
php artisan ide-helper:meta
app ( ' events ' )-> fire ();
App :: make ( ' events ' )-> fire ();
/** @var IlluminateFoundationApplication $app */
$ app -> make ( ' events ' )-> fire ();
// When the key is not found, it uses the argument as class name
app ( ' AppSomeClass ' );
// Also works with
app ( App SomeClass ::class);
NOTA: Pode ser necessário reiniciar o phpstorm e verifique se
.phpstorm.meta.php
está indexado.NOTA: Quando você receber uma Fatalexception: Classe não encontrada, verifique sua configuração (por exemplo, remova o S3 como driver em nuvem quando não tiver o S3 configurado. Remova o Redis ServiceProvider quando não o usar).
Você pode alterar o nome do arquivo gerado através do meta_filename
de configuração. Isso pode ser útil para casos em que você deseja aproveitar o suporte do Phpstorm do diretório .phpstorm.meta.php/
: Todos os arquivos colocados lá são analisados, se você deseja fornecer arquivos adicionais ao phpstorm.
O gerador de auxiliar de Laravel IDE é um software de código aberto licenciado sob a licença do MIT