Completar phpdocs, directamente de la fuente
Este paquete genera archivos auxiliares que permiten que su IDE proporcione una autorización automática precisa. La generación se realiza en función de los archivos de su proyecto, por lo que siempre están actualizados.
La sucursal 3.x admite Laravel 10 y 11. Para la versión anterior, use las versiones 2.x.
Requiere este paquete con el compositor usando el siguiente comando:
composer require --dev barryvdh/laravel-ide-helper
Nota
Si se encuentra en conflicto con Doctrine/Dbal, intente: composer require --dev barryvdh/laravel-ide-helper --with-all-dependencies
Este paquete utiliza el mecanismo de descubrimiento automático de paquetes de Laravels, lo que significa que si no instala dependencias de Dev en producción, tampoco se cargará.
Si por alguna razón desea controlar manualmente esto:
extra.laravel.dont-discover
en composer.json
, por ejemplo "extra" : {
"laravel" : {
"dont-discover" : [
" barryvdh/laravel-ide-helper "
]
}
}
providers
en config/app.php
: Barryvdh LaravelIdeHelper IdeHelperServiceProvider ::class,
AppServiceProvider
con el método register()
: public function register ()
{
if ( $ this -> app -> isLocal ()) {
$ this -> app -> register ( Barryvdh LaravelIdeHelper IdeHelperServiceProvider ::class);
}
// ...
}
Nota: Evite almacenar en caché la configuración en su entorno de desarrollo, puede causar problemas después de instalar este paquete; Borrar respectivamente el caché de antemano a través de
php artisan cache:clear
si encuentra problemas al ejecutar los comandos
¡Mira este video de Laracasts para una introducción/explicación rápida!
php artisan ide-helper:generate
- Generación PHPDOC para fachadas de Laravelphp artisan ide-helper:models
- PHPDOC para modelosphp artisan ide-helper:meta
- PhpStorm Meta FileNota: Necesita CodeComplice para el texto sublime: https://github.com/spectacles/codeComplice
Ahora puede volver a generar los documentos usted mismo (para futuras actualizaciones)
php artisan ide-helper:generate
Nota: bootstrap/compiled.php
debe eliminarse primero, por lo que ejecuta php artisan clear-compiled
antes de generar.
Esto generará el archivo _ide_helper.php
, que se espera que sea revivido adicionalmente por su IDE para autocompletar. Puede usar el filename
de configuración para cambiar su nombre.
Puede configurar su composer.json
para hacer esto cada vez que actualice sus dependencias:
"scripts" : {
"post-update-cmd" : [
"Illuminate\Foundation\ComposerScripts::postUpdate" ,
"@php artisan ide-helper:generate" ,
"@php artisan ide-helper:meta"
]
} ,
También puede publicar el archivo de configuración para cambiar las implementaciones (es decir, interfaz a clase específica) o establecer valores predeterminados para --helpers
.
php artisan vendor:publish --provider= " BarryvdhLaravelIdeHelperIdeHelperServiceProvider " --tag=config
El generador intenta identificar la clase real, pero si no se puede encontrar, puede definirla en el archivo de configuración.
Algunas clases necesitan una conexión de base de datos que funcione. Si no tiene una conexión de trabajo predeterminada, no se incluirán algunas fachadas. Puede usar un controlador SQLite en memoria agregando la opción -M
.
Si usa fachadas en tiempo real en su aplicación, también se incluirán en el archivo generado utilizando una anotación @mixin
y extender la clase original debajo de la fachada.
Nota : Esta característica utiliza los archivos de fachadas en tiempo real generados en la carpeta storage/framework/cache
. Esos archivos se generan a pedido a medida que usa la fachada en tiempo real, por lo que si el marco no ha generado eso primero, no se incluirá en el archivo de ayuda. Ejecute la ruta/comando/código primero y luego regenere el archivo auxiliar y esta vez la fachada en tiempo real se incluirá en ella.
Puede elegir incluir archivos auxiliares. Esto no está habilitado de forma predeterminada, pero puede anularlo con la opción --helpers (-H)
. El Illuminate/Support/helpers.php
ya está configurado, pero puede agregar/eliminar sus propios archivos en el archivo de configuración.
Este paquete puede generar PHPDOC para macros y mezclas que se agregarán al archivo _ide_helper.php
.
Pero esto solo funciona si usa el tipo de insinción al declarar una macro.
Str :: macro ( ' concat ' , function ( string $ str1 , string $ str2 ) : string {
return $ str1 . $ str2 ;
});
Si no desea escribir sus propiedades usted mismo, puede usar el comando php artisan ide-helper:models
para generar PHPDOC, basados en columnas de tabla, relaciones y getters/setters.
Nota: Este comando requiere una conexión de base de datos de trabajo para introspectar la tabla de cada modelo
De manera predeterminada, se le pide que sobrescriba o escriba en un archivo separado ( _ide_helper_models.php
). Puede escribir los comentarios directamente en su archivo de modelo, utilizando la opción --write (-W)
o forzar para no escribir con --nowrite (-N)
.
Alternativamente, el uso de la opción --write-mixin (-M)
solo agregará una etiqueta de mezcla a su archivo de modelo, escribiendo el resto en ( _ide_helper_models.php
). El nombre de la clase será diferente del modelo, evitando la molestia duplicada IDE.
Asegúrese de hacer una copia de seguridad de sus modelos, antes de escribir la información.
Escribir en los modelos debe mantener los comentarios existentes y solo agregar nuevas propiedades/métodos. No actualizará propiedades/métodos cambiados.
Con la opción --reset (-R)
, se reemplaza todo el PHPDOC existente, incluidos los comentarios que se han realizado.
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)
* …
*/
Con la opción --write-mixin (-M)
/**
* …
* @mixin IdeHelperPost
*/
Por defecto, se escanean los modelos en app/models
. El argumento opcional dice qué modelos usar (también fuera de la aplicación/modelos).
php artisan ide-helper:models " AppModelsPost " " AppModelsUser "
También puede escanear un directorio diferente, utilizando la opción --dir
(relativa desde la ruta base):
php artisan ide-helper:models --dir= " path/to/models " --dir= " app/src/Model "
Puede publicar el archivo de configuración ( php artisan vendor:publish
) y establecer los directorios predeterminados.
Los modelos se pueden ignorar utilizando la opción --ignore (-I)
php artisan ide-helper:models --ignore= " AppModelsPost,AppModelsUser "
O se puede ignorar configurando la configuración ignored_models
' ignored_models ' => [
App Post ::class,
Api User ::class
],
where*
métodos Eloquent permite llamar where<Attribute>
en sus modelos, por ejemplo, Post::whereTitle(…)
y traduce esto automáticamente a EG Post::where('title', '=', '…')
.
Si por alguna razón no se ha deseado generarlos (uno para cada columna), puede deshabilitar esto a través de config write_model_magic_where
y configurarlo en false
.
*_count
Propiedades de cuenta Puede usar el método ::withCount
para contar los resultados del número de una relación sin cargarlos realmente. Esos resultados se colocan en atributos después de la convención <columname>_count
.
Por defecto, estos atributos se generan en el PHPDOC. Puede apagarlos configurando la configuración write_model_relation_count_properties
a false
.
Laravel 9 introdujo anotaciones genéricas en Docblocks para colecciones. PhpStorm 2022.3 y arriba admiten el uso de anotaciones de genéricos dentro de @property
y @property-read
en DocBlocks, por ejemplo, Collection<User>
en lugar de Collection|User[]
.
Estos se pueden deshabilitar configurando la configuración use_generics_annotations
en false
.
@comment
basado en DocBlock Para apoyar mejor los IDE, las relaciones y los getters/setters también pueden agregar un comentario a una propiedad como las columnas de la tabla. Por lo tanto, se utiliza un 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
* …
*/
Se agregó un nuevo método a los modelos elocuentes llamado referencia newEloquentBuilder
donde podemos agregar soporte para crear una nueva clase dedicada en lugar de usar ámbitos locales en el modelo mismo.
Si por alguna razón no se ha deseado generarlos (uno para cada columna), puede deshabilitar esto a través de config write_model_external_builder_methods
y configurarlo en false
.
Si está utilizando relaciones que no están integradas en Laravel, deberá especificar el nombre y la clase de devolución en la configuración para obtener la generación adecuada.
' additional_relation_types ' => [
' externalHasMany ' => My Package externalHasMany::class
],
Las relaciones encontradas generalmente generarán un valor de retorno basado en el nombre de la relación.
Si sus relaciones personalizadas no siguen este esquema de nombres tradicional, puede definir su tipo de retorno manualmente. Las opciones disponibles son many
y morphTo
.
' additional_relation_return_types ' => [
' externalHasMultiple ' => ' many '
],
Si necesita información adicional sobre su modelo de fuentes que no se manejan de forma predeterminada, puede conectarse al proceso de generación con ganchos de modelo para agregar información adicional sobre la marcha. Simplemente cree una clase que implementa ModelHookInterface
y agréguela a la matriz model_hooks
en la configuración:
' model_hooks ' => [
MyCustomHook ::class,
],
El método run
se llamará durante la generación para cada modelo y recibe el ModelsCommand
ejecución actual y el Model
actual, por ejemplo,:
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
Si necesita soporte de PHPDOC para métodos fluidos en la migración, por ejemplo
$ table -> string ( " somestring " )-> nullable ()-> index ();
Después de publicar el proveedor, simplemente cambie la línea include_fluent
en su archivo config/ide-helper.php
en:
' include_fluent ' => true ,
Luego ejecute php artisan ide-helper:generate
, ahora verá todos los métodos fluidos reconocidos por su IDE.
Si desea que los métodos factory()->create()
y factory()->make()
para devolver la clase de modelo correcta, puede habilitar los constructores de fábrica personalizados con la línea include_factory_builders
en su archivo config/ide-helper.php
. Deprecido para Laravel 8 o más tarde.
' include_factory_builders ' => true ,
Para que esto funcione, también debe publicar el archivo meta PhpStorm (ver más abajo).
Es posible generar un archivo meta PhpStorm para agregar soporte para el patrón de diseño de fábrica. Para Laravel, esto significa que podemos hacer que PhpStorm entienda qué tipo de objeto estamos resolviendo desde el contenedor del COI. Por ejemplo, events
devolverán un objeto IlluminateEventsDispatcher
, por lo que con el archivo meta puede llamar a app('events')
y se automatizará los métodos de despachador.
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: Es posible que deba reiniciar PhpStorm y asegurarse de que
.phpstorm.meta.php
esté indexado.Nota: Cuando reciba una clase FATALEXCERTION: no encontrada, verifique su configuración (por ejemplo, elimine S3 como controlador de nube cuando no tenga S3 configurado. Elimine Redis ServiceProvider cuando no lo use).
Puede cambiar el nombre de archivo generado a través de la configuración meta_filename
. Esto puede ser útil para los casos en los que desea aprovechar el soporte de PhpStorm del directorio .phpstorm.meta.php/
: todos los archivos colocados allí están analizados, si desea proporcionar archivos adicionales a phpstorm.
El generador de Helper Laravel IDE es un software de código abierto con licencia bajo la licencia MIT