01-04-convencion nombres
En Laravel, existen convenciones y buenas prácticas para nombrar controladores, modelos, métodos, variables y tablas de la base de datos. Estas convenciones ayudan a mantener la consistencia en el código y aprovechar al máximo las características de Laravel, como la inyección de dependencias y el ORM Eloquent.
Te explico las convenciones de nomenclatura en Laravel con énfasis en la estructura Verbo + Sustantivo:
estructura para controladores:
📝 Controladores - Estructura Correcta
Nombres de Clases (Controladores)
Caso: PascalCase
Estructura: Sujeto/Objeto (Sustantivo) + Controller
Sufijo: Controller
Número: Sustantivo en Plural (representa la colección que maneja)
✅ Ejemplos Correctos:
php
// Controlador para manejar usuarios (colección de usuarios)
class UsersController extends Controller {} // Sujeto: Users
// Controlador para manejar productos (colección de productos)
class ProductsController extends Controller {} // Sujeto: Products
// Controlador para categorías de productos
class ProductCategoriesController extends Controller {} // Sujeto: ProductCategories
❌ Ejemplos Incorrectos:
php
class UserController extends Controller {} // ❌ Debe ser plural: UsersController
class ManageUsersController extends Controller {} // ❌ No sigue estructura Sustantivo + Controller
class user_controller extends Controller {} // ❌ Caso incorrecto
🔧 Métodos - Estructura Correcta
Métodos RESTful Estándar:
php
class ProductsController extends Controller
{
// SUJETO: Products | VERBO: index (listar)
public function index() {} // GET /products
// SUJETO: Product | VERBO: create (mostrar formulario creación)
public function create() {} // GET /products/create
// SUJETO: Product | VERBO: store (almacenar)
public function store() {} // POST /products
// SUJETO: Product | VERBO: show (mostrar)
public function show() {} // GET /products/{id}
// SUJETO: Product | VERBO: edit (mostrar formulario edición)
public function edit() {} // GET /products/{id}/edit
// SUJETO: Product | VERBO: update (actualizar)
public function update() {} // PUT/PATCH /products/{id}
// SUJETO: Product | VERBO: destroy (eliminar)
public function destroy() {} // DELETE /products/{id}
}
Métodos Personalizados:
php
class UsersController extends Controller
{
// SUJETO: User | VERBO: activate (activar)
public function activate() {} // PUT /users/{id}/activate
// SUJETO: User | VERBO: suspend (suspender)
public function suspend() {} // PUT /users/{id}/suspend
// SUJETO: UserProfile | VERBO: update (actualizar)
public function updateProfile() {} // PUT /users/{id}/profile
// SUJETO: UserPassword | VERBO: change (cambiar)
public function changePassword() {} // PUT /users/{id}/password
}
🎯 Estructura Generalizada
Para Controladores:
text
[SUSTANTIVO_PLURAL] + Controller
Sustantivo: Representa el recurso/entidad que se manipula
Plural: Indica que maneja una colección del recurso
Controller: Identifica el tipo de clase
Para Métodos:
text
[VERBO] + [SUSTANTIVO_OPCIONAL]()
Verbo: La acción a realizar (index, create, store, show, edit, update, destroy)
Sustantivo: Opcional, para especificar sub-recursos (profile, password, settings)
🗃️ Modelos
Nombres de Modelos
Caso: PascalCase
Estructura: Sustantivo en Singular
Ejemplos:
User (Modelo para usuario) ✅
Product (Modelo para producto) ✅
Category (Modelo para categoría) ✅
php
// VERBO: Definir | SUSTANTIVO: Modelo de Usuario
class User extends Model
{
// VERBO: Obtener | SUSTANTIVO: Posts del usuario
public function getUsersPosts() {}
// VERBO: Calcular | SUSTANTIVO: Edad del usuario
public function calculateUserAge() {}
}
📊 Variables
Variables y Propiedades
Caso: camelCase
Estructura: Sustantivo descriptivo (a veces con adjetivo)
Ejemplos:
php
// ✅ Variables con sustantivos descriptivos
$userName = 'John'; // Nombre de usuario
$productList = []; // Lista de productos
$totalAmount = 100; // Monto total
$isActiveUser = true; // Usuario activo
$hasValidSubscription = false; // Tiene suscripción válida
// ✅ Colecciones (sustantivo en plural)
$activeUsers = User::where('active', true)->get(); // Usuarios activos
$productCategories = Category::all(); // Categorías de productos
📋 Resumen Completo de Reglas
🎯 Ejemplos Prácticos Completos
Controlador con Métodos Personalizados
php
class OrderController extends Controller
{
// ✅ VERBO + SUSTANTIVO: Calcular total de orden
public function calculateOrderTotal($orderId)
{
$order = Order::find($orderId);
$total = $order->calculateTotal();
return response()->json(['total' => $total]);
}
// ✅ VERBO + SUSTANTIVO: Aplicar descuento a orden
public function applyOrderDiscount($orderId, $discount)
{
$order = Order::find($orderId);
$order->applyDiscount($discount);
return response()->json(['success' => true]);
}
// ✅ VERBO + SUSTANTIVO: Generar factura de orden
public function generateOrderInvoice($orderId)
{
$invoice = Order::generateInvoice($orderId);
return response()->download($invoice);
}
}
Modelo con Métodos
php
class User extends Model
{
// ✅ VERBO + SUSTANTIVO: Verificar contraseña de usuario
public function verifyUserPassword($password)
{
return Hash::check($password, $this->password);
}
// ✅ VERBO + SUSTANTIVO: Actualizar perfil de usuario
public function updateUserProfile($data)
{
$this->update($data);
return $this;
}
// ✅ VERBO + SUSTANTIVO: Calcular edad de usuario
public function calculateUserAge()
{
return now()->diffInYears($this->birthdate);
}
}
🔄 Rutas con Convenciones
php
// Rutas RESTful automáticas
Route::resource('products', ProductController::class);
// Rutas personalizadas con nombres VERBO + SUSTANTIVO
Route::post('products/{id}/activate', [ProductController::class, 'activateProduct'])
->name('products.activate'); // activateProduct = VERBO + SUSTANTIVO
Route::get('users/{id}/reports', [UserController::class, 'generateUserReport'])
->name('users.generateReport'); // generateUserReport = VERBO + SUSTANTIVO
Esta estructura Verbo + Sustantivo hace que el código sea:
Más legible: Se entiende inmediatamente qué acción realiza cada método
Más mantenible: Nombres consistentes y predecibles
Más intuitivo: Sigue el flujo natural de lenguaje (acción + objeto
resumen
Modelo: User (singular) → Instancia individual
Tabla: users (plural) → Colección de instancias
Controlador: UsersController → Maneja la colección
Métodos: index(), show(), etc. → Operaciones sobre la colección
Esta estructura sigue el principio de que el controlador maneja colecciones de recursos, por eso el sustantivo va en plural, mientras que los métodos operan sobre elementos individuales o la colección completa.
Comentarios
Publicar un comentario