Skip to content

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.

  • 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();

🔝 Volver al índice

  • Formato: camelCase con prefijos is, are o has.
  • 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;

🔝 Volver al índice

  • Formato: PascalCase
  • Descripción: Deben ir en singular y terminar con “Controller”. Por ejemplo User + Controller
// good
class UserController {
// code
}
class ProductController {
// code
}
// bad
class usercontroller {
// code
}
class ProductService {
// code
}

🔝 Volver al índice

  • 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.
// good
public function getName(): string {
// code
}
public function updateProfile(array $data): bool {
// code
}
// bad
public function Name() {
// code
}
public function get_name() {
// code
}

🔝 Volver al índice

  • Formato: PascalCase
  • Descripción: Utiliza nombres claros que indiquen la acción y en singular.
// good
class Clinic extends Model {
// code
}
class ClinicReview extends Model {
// code
}
// bad
class Clinics extends Model {
// code
}
class ClinicReviews extends Model {
// code
}
  • 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.”
// good
public 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.”
// good
public function postsAuthor() {
// code
}
public function comments() {
// code
}

🔝 Volver al índice

  • Formato: snake_case
  • Descripción: Utiliza el comando php artisan make:migration create_<table_name>_table y se generara un archivo ya estruturado.
// good
Schema::create('clinic_reviews', function (Blueprint $table) {
// code
});
// bad
Schema::create('all_reviews', function (Blueprint $table) {
// code
});
  • Descripción: Cada modelo debe estar en orden alfabético y separadas por un guión bajo.
// good
Schema::create('clinic_review', function (Blueprint $table) {
$table->foreignId('clinic_id');
$table->foreignId('review_id');
$table->primary(['clinic_id', 'review_id']);
});
// bad
Schema::create('clinics_reviews', function (Blueprint $table) {
$table->foreignId('clinic_id');
$table->foreignId('review_id');
$table->primary(['clinic_id', 'review_id']);
});
  • Descripción: Las claves foráneas deben ser el nombre del modelo (en singular), con _id añadido al final (suponiendo que el PK en la otra tabla es el id)
// good
$table->foreignId('clinic_id');
$table->foreignId('review_id');
  • 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');

🔝 Volver al índice

  • 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.
Terminal window
// good
resources/views/show-doctor.blade.php
// bad
resources/views/doctorProfile.blade.php

🔝 Volver al índice

  • 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.
// Good
Route::get('doctors', [DoctorController::class, 'index']);
Route::get('doctors/{id}', [DoctorController::class, 'show']);
// Bad
Route::get('/all_Doctors', [DoctorController::class, 'all']);
Route::get('/DrProfile', [DoctorController::class, 'show_profile']);
  • Formato: snake_case con 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.
// Good
Route::get(
'doctors',
[DoctorController::class, 'index']
)->name('doctors');
Route::get(
'doctors/{id}',
[DoctorController::class, 'show']
)->name('doctors.show_profile`');
// Bad
Route::get(
'/all_Doctors',
[DoctorController::class, 'all']
)->name('showDoctors');
Route::get(
'/DrProfile',
[DoctorController::class, 'show_profile']
)->name('doctors.show-profile');

🔝 Volver al índice

Utiliza la convencion aceptada por la comunidad

Section titled “Utiliza la convencion aceptada por la comunidad”

Sigue los estándares PSR.

QuéCómoBuenoMalo
ControladorsingularControladorArticuloControladorArticulos
Rutapluralarticulos/1articulo/1
Nombres de rutassnake_case con notación de puntosusuarios.mostrar_activosusuarios.mostrar-activos, mostrar-usuarios-activos
ModelosingularUsuarioUsuarios
Relaciones hasOne o belongsTosingularcomentarioArticulocomentariosArticulo, comentario_articulo
Cualquier otra relaciónpluralcomentariosArticulocomentarioArticulo, comentarios_articulo
Tablapluralcomentarios_articulocomentario_articulo, comentariosArticulo
Tabla de pivoteNombres de modelos en singular y en orden alfabéticoarticulo_usuariousuario_articulo, articulos_usuarios
Columna de tablasnake_case sin el nombre del modelometa_tituloMetaTitulo; articulo_meta_titulo
Propiedad de modelosnake_case$model->created_at$model->createdAt
Clave foráneaNombre en singular del modelo con el sufijo _idarticulo_idarticuloId, id_articulo, articulos_id
Clave primaria-idid_personalizado
Migración-2017_01_01_000000_create_articles_table2017_01_01_000000_articles
MétodocamelCasetraerTodotraer_todo
Método en controlador de recursostableguardarguardarArticulo
Método en clase de pruebascamelCasetestGuestCannotSeeArticletest_guest_cannot_see_article
VariablecamelCase$articulosConAutor$articulos_con_autor
Coleccióndescriptiva, plural$usuariosActivos = Usuario::active()->get()$activo, $data
Objetodescriptivo, singular$usuarioActivo = Usuario::active()->first()$usuarios, $obj
Índice de archivos de configuración y lenguajesnake_casearticulos_habilitadosarticulosHabilitados; articulos-habilitados
Vistaskebab-caseshow-filtered.blade.phpshowFiltered.blade.php, show_filtered.blade.php
Configuraciónsnake_casegoogle_calendar.phpgoogleCalendar.php, google-calendar.php
Contrato (interface)adjetivo o sustantivoAuthenticationInterfaceAuthenticatable, IAuthentication
TraitadjetivoNotifiableNotificationTrait
Trait (PSR)adjectiveNotifiableTraitNotification
EnumsingularUserTypeUserTypes, UserTypeEnum
FormRequestsingularUpdateUserRequestUpdateUserFormRequest, UserFormRequest, UserRequest
SeedersingularUserSeederUsersSeeder

🔝 Volver al índice

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

🔝 Volver al índice