Naming Conventions para Proyectos en Laravel
Esta guía establece convenciones de nombres para proyectos desarrollados en Laravel. Siguiendo estos lineamientos, se busca mejorar la consistencia, colaboración y mantenibilidad del código.
Índice
Section titled “Índice”- Variables
- Booleans
- Controllers
- Methods
- Models
- Migrations
- Views
- Routes
- Utiliza la convencion aceptada por la comunidad
- Otras buenas practicas
Variables
Section titled “Variables”- Formato:
camelCase - Descripción: Usar nombres descriptivos y específicos para el propósito de cada variable. Si contiene un arreglo o es una colección de varios elementos, nombrar la variable en plural.
// good$userName = 'Juan';$productCount = 5;$users = User::all();
// bad$usrNm = 'Juan';$product_Count = 5;$all_users = User::all();Booleans
Section titled “Booleans”- Formato:
camelCasecon prefijosis,areohas. - Descripción: Nombrar los booleans de forma clara, indicando una condición o estado.
// good$isAvailable = true;$hasPermission = false;$areItemsSelected = true;
// bad$available = true;$permission = false;$selectedItems = true;Controllers
Section titled “Controllers”- Formato:
PascalCase - Descripción: Deben ir en singular y terminar con “Controller”. Por ejemplo
User+Controller
// goodclass UserController { // code}
class ProductController { // code}
// badclass usercontroller { // code}
class ProductService { // code}Methods
Section titled “Methods”- Formato:
camelCase - Descripción: Utiliza nombres claros que indiquen la acción y en singular. Usa el verbo en infinitivo para que el propósito del método sea evidente.
// goodpublic function getName(): string { // code}
public function updateProfile(array $data): bool { // code}
// badpublic function Name() { // code}
public function get_name() { // code}Models
Section titled “Models”- Formato:
PascalCase - Descripción: Utiliza nombres claros que indiquen la acción y en singular.
// goodclass Clinic extends Model { // code}
class ClinicReview extends Model { // code}
// badclass Clinics extends Model { // code}
class ClinicReviews extends Model { // code}Relationships
Section titled “Relationships”- Formato:
camelCase
Relaciones hasOne o belongsTo deben ser nombrados en singular. Para nombres de métodos de relaciones, usa el infinitivo si describe una acción o condición específica.
Section titled “Relaciones hasOne o belongsTo deben ser nombrados en singular. Para nombres de métodos de relaciones, usa el infinitivo si describe una acción o condición específica.”// goodpublic function postAuthor() { // code}
public function post() { // code}Cualquier otra relación debe ser nombrada en plural.
Section titled “Cualquier otra relación debe ser nombrada en plural.”// goodpublic function postsAuthor() { // code}
public function comments() { // code}Migrations
Section titled “Migrations”- Formato:
snake_case - Descripción: Utiliza el comando
php artisan make:migration create_<table_name>_tabley se generara un archivo ya estruturado.
// goodSchema::create('clinic_reviews', function (Blueprint $table) { // code});
// badSchema::create('all_reviews', function (Blueprint $table) { // code});Pivot Tables
Section titled “Pivot Tables”- Descripción: Cada modelo debe estar en orden alfabético y separadas por un guión bajo.
// goodSchema::create('clinic_review', function (Blueprint $table) { $table->foreignId('clinic_id'); $table->foreignId('review_id'); $table->primary(['clinic_id', 'review_id']);});
// badSchema::create('clinics_reviews', function (Blueprint $table) { $table->foreignId('clinic_id'); $table->foreignId('review_id'); $table->primary(['clinic_id', 'review_id']);});Foreign Keys
Section titled “Foreign Keys”- Descripción: Las claves foráneas deben ser el nombre del modelo (en singular), con
_idañadido al final (suponiendo que el PK en la otra tabla es elid)
// good$table->foreignId('clinic_id');$table->foreignId('review_id');Column Names
Section titled “Column Names”- Descripción: Los nombres de las columnas deben ser claros y no deben hacer referencia al nombre de la tabla.
// good$table->string('title');$table->text('body');$table->date('created_at');
// bad$table->string('pageTitle');$table->text('post_body');$table->date('blog_post_created_at');- Formato:
kebab-case - Descripción: Los nombres de archivos de vistas deben reflejar la funcionalidad o la página representada. Usa el verbo en infinitivo si el nombre describe una acción o propósito específico.
// goodresources/views/show-doctor.blade.php
// badresources/views/doctorProfile.blade.phpRoutes
Section titled “Routes”- Formato:
kebab-case - Descripción: Las rutas deben ser descriptivas y reflejar el recurso o acción correspondiente. Usa el verbo en infinitivo para reflejar la acción o propósito si es necesario.
// GoodRoute::get('doctors', [DoctorController::class, 'index']);Route::get('doctors/{id}', [DoctorController::class, 'show']);
// BadRoute::get('/all_Doctors', [DoctorController::class, 'all']);Route::get('/DrProfile', [DoctorController::class, 'show_profile']);Named Routes
Section titled “Named Routes”- Formato:
snake_casecon notación de puntos. - Descripción: Usa nombres descriptivos que reflejen el propósito de la ruta. Usa el infinitivo para indicar la acción si es necesario.
// GoodRoute::get( 'doctors', [DoctorController::class, 'index'])->name('doctors');
Route::get( 'doctors/{id}', [DoctorController::class, 'show'])->name('doctors.show_profile`');
// BadRoute::get( '/all_Doctors', [DoctorController::class, 'all'])->name('showDoctors');
Route::get( '/DrProfile', [DoctorController::class, 'show_profile'])->name('doctors.show-profile');Utiliza la convencion aceptada por la comunidad
Section titled “Utiliza la convencion aceptada por la comunidad”Sigue los estándares PSR.
| Qué | Cómo | Bueno | Malo |
|---|---|---|---|
| Controlador | singular | ControladorArticulo | |
| Ruta | plural | articulos/1 | |
| Nombres de rutas | snake_case con notación de puntos | usuarios.mostrar_activos | |
| Modelo | singular | Usuario | |
| Relaciones hasOne o belongsTo | singular | comentarioArticulo | |
| Cualquier otra relación | plural | comentariosArticulo | |
| Tabla | plural | comentarios_articulo | |
| Tabla de pivote | Nombres de modelos en singular y en orden alfabético | articulo_usuario | |
| Columna de tabla | snake_case sin el nombre del modelo | meta_titulo | |
| Propiedad de modelo | snake_case | $model->created_at | |
| Clave foránea | Nombre en singular del modelo con el sufijo _id | articulo_id | |
| Clave primaria | - | id | |
| Migración | - | 2017_01_01_000000_create_articles_table | |
| Método | camelCase | traerTodo | |
| Método en controlador de recursos | table | guardar | |
| Método en clase de pruebas | camelCase | testGuestCannotSeeArticle | |
| Variable | camelCase | $articulosConAutor | |
| Colección | descriptiva, plural | $usuariosActivos = Usuario::active()->get() | |
| Objeto | descriptivo, singular | $usuarioActivo = Usuario::active()->first() | |
| Índice de archivos de configuración y lenguaje | snake_case | articulos_habilitados | |
| Vistas | kebab-case | show-filtered.blade.php | |
| Configuración | snake_case | google_calendar.php | |
| Contrato (interface) | adjetivo o sustantivo | AuthenticationInterface | |
| Trait | adjetivo | Notifiable | |
| Trait (PSR) | adjective | NotifiableTrait | |
| Enum | singular | UserType | |
| FormRequest | singular | UpdateUserRequest | |
| Seeder | singular | UserSeeder |
Otras buenas practicas
Section titled “Otras buenas practicas”- Mantén estas convenciones en el proyecto para facilitar la colaboración.
- Usa nombres claros y evita abreviaciones.
- No coloques ningún tipo de lógica en los archivos de rutas.
- Minimiza el uso de PHP vanilla en las plantillas Blade.