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

Elemento

Caso

Estructura

Singular/Plural

Ejemplo

Controladores

PascalCase

Sustantivo + Controller

Plural

UsersController

Métodos REST

camelCase

Verbo

-

store(), update()

Métodos Personalizados

camelCase

Verbo + Sustantivo

-

calculateTotal()

Modelos

PascalCase

Sustantivo

Singular

User, Product

Variables

camelCase

Sustantivo

Depende contexto

$userName, $products

Tablas BD

snake_case

Sustantivo

Plural

users, product_categories

Columnas BD

snake_case

Sustantivo

-

created_at, price

🎯 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

Entradas más populares de este blog

02 -Rutas en Laravel

3-Rutas