2-Te explico las convenciones de nomenclatura en Laravel:

Controladores

Nombres de Clases (Controladores)

  • Caso: PascalCase

  • SufijoController

  • Ejemplos:

    • UserController ✅

    • ProductCategoryController ✅

    • Estructura: Sujeto/Objeto (Sustantivo) + Controller

    • user_controller ❌

Convención RESTful

php
// Controlador para manejar productos
class ProductController extends Controller
{
    public function index() {}    // GET /products
    public function create() {}   // GET /products/create
    public function store() {}    // POST /products
    public function show() {}     // GET /products/{id}
    public function edit() {}     // GET /products/{id}/edit
    public function update() {}   // PUT/PATCH /products/{id}
    public function destroy() {}  // DELETE /products/{id}
}

🔧 Métodos

Nombres de Métodos

  • Caso: camelCase

  • Verbo + Sustantivo: Primero el verbo, luego el sustantivo

  • Ejemplos:

    • getUserProfile() ✅

    • updateProductPrice() ✅

    • calculateTotal() ✅

    • UserProfileGet() ❌

Métodos RESTful Comunes

php
public function index() {}      // Listar recursos
public function create() {}     // Mostrar formulario de creación
public function store() {}      // Guardar nuevo recurso
public function show() {}       // Mostrar recurso específico
public function edit() {}       // Mostrar formulario de edición
public function update() {}     // Actualizar recurso
public function destroy() {}    // Eliminar recurso

🗃️ Modelos

Nombres de Modelos

  • Caso: PascalCase

  • Singular: Siempre en singular

  • Ejemplos:

    • User ✅ (tabla: users)

    • Product ✅ (tabla: products)

    • Category ✅ (tabla: categories)

    • Users ❌

Relación con Tablas

php
class User extends Model
{
    // Por defecto busca la tabla 'users'
    protected $table = 'users'; // Opcional si sigue convención
}

class Product extends Model
{
    // Buscará automáticamente la tabla 'products'
}

📊 Variables

Variables Regulares

  • Caso: camelCase

  • Ejemplos:

    • $userName ✅

    • $productList ✅

    • $totalAmount ✅

    • $user_name ❌ (aunque funciona, no sigue convención)

Colecciones y Arrays

php
$users = User::all();          // Colección de usuarios
$user = User::first();         // Usuario individual

$productCategories = [];       // Array de categorías
$activeProducts = Product::where('active', true)->get();

📋 Resumen de Reglas

ElementoCasoSingular/PluralEjemplo
ControladoresPascalCasePlural + ControllerUsersController
ModelosPascalCaseSingularUser
MétodoscamelCase-getUserData()
VariablescamelCaseDepende del contexto$userName
Tablas BDsnake_casePluraluser_profiles
Columnas BDsnake_case-created_at

🎯 Buenas Prácticas

1. Controladores por Recurso

php
// ✅ Correcto
php artisan make:controller ProductController --resource

// ❌ Evitar controladores que hagan de todo
php artisan make:controller MainController

2. Nombres Descriptivos

php
// ✅ Bueno
public function calculateOrderTotal() {}
public function sendWelcomeEmail() {}

// ❌ Malo
public function doSomething() {}
public function process() {}

3. Rutas RESTful

php
// ✅ Convención estándar
Route::resource('products', ProductController::class);

// ✅ Rutas personalizadas con nombres claros
Route::post('products/{id}/activate', [ProductController::class, 'activate'])
     ->name('products.activate');

🔄 Relaciones con Tablas

La magia de Eloquent funciona con estas convenciones:

  • ModeloUser (singular)

  • Tablausers (plural)

  • Clave primariaid

  • Claves foráneasuser_idpost_id

php
// Si necesitas personalizar
class User extends Model
{
    protected $table = 'mi_tabla_usuarios'; // Solo si no sigue convención
    protected $primaryKey = 'user_id';      // Solo si no es 'id'
}

Seguir estas convenciones hace tu código más legible y mantenible, y aprovecha todas las funcionalidades automáticas de Laravel.

megusto mucho que indicaras en las convenciones de nomenclatura la estructura Verbo + Sustantivo: Primero el verbo, luego el sustantivo , puedes volver a escribir todo pero indicando tambien en cada momento la regla Verbo + Sustantivo: Primero el verbo, luego el sustantivo

Te explico las convenciones de nomenclatura en Laravel con énfasis en la estructura Verbo + Sustantivo:

📝 Controladores

Nombres de Clases (Controladores)

  • Caso: PascalCase

  • EstructuraSustantivo (Plural) + Controller

  • SufijoController

  • Ejemplos:

    • UserController (Maneja usuarios) ✅

    • ProductController (Maneja productos) ✅

    • OrderController (Maneja órdenes) ✅

Convención RESTful (Métodos)

php
class ProductController extends Controller
{
    // VERBO: Listar | SUSTANTIVO: Productos
    public function index() {}    // GET /products
    
    // VERBO: Crear | SUSTANTIVO: Formulario de producto
    public function create() {}   // GET /products/create
    
    // VERBO: Almacenar | SUSTANTIVO: Producto
    public function store() {}    // POST /products
    
    // VERBO: Mostrar | SUSTANTIVO: Producto específico
    public function show() {}     // GET /products/{id}
    
    // VERBO: Editar | SUSTANTIVO: Formulario de producto
    public function edit() {}     // GET /products/{id}/edit
    
    // VERBO: Actualizar | SUSTANTIVO: Producto
    public function update() {}   // PUT/PATCH /products/{id}
    
    // VERBO: Destruir | SUSTANTIVO: Producto
    public function destroy() {}  // DELETE /products/{id}
}

🔧 Métodos Personalizados

Estructura: VERBO + SUSTANTIVO

  • Orden: Primero el verbo, luego el sustantivo

  • Caso: camelCase

  • Ejemplos:

php
// ✅ CORRECTO: Verbo primero, luego sustantivo
public function getUserProfile() {}       // Obtener perfil de usuario
public function updateProductPrice() {}   // Actualizar precio de producto
public function calculateOrderTotal() {}  // Calcular total de orden
public function sendWelcomeEmail() {}     // Enviar email de bienvenida
public function generateSalesReport() {}  // Generar reporte de ventas
public function activateUserAccount() {}  // Activar cuenta de usuario

// ❌ INCORRECTO: Sustantivo primero
public function userProfileGet() {}       // ❌
public function productPriceUpdate() {}   // ❌
public function orderTotalCalculate() {}  // ❌

🗃️ Modelos

Nombres de Modelos

  • Caso: PascalCase

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

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

ElementoCasoEstructuraSingular/PluralEjemplo
ControladoresPascalCaseSustantivo + ControllerPluralUsersController
Métodos RESTcamelCaseVerbo-store()update()
Métodos PersonalizadoscamelCaseVerbo + Sustantivo-calculateTotal()
ModelosPascalCaseSustantivoSingularUserProduct
VariablescamelCaseSustantivoDepende contexto$userName$products
Tablas BDsnake_caseSustantivoPluralusersproduct_categories
Columnas BDsnake_caseSustantivo-created_atprice

🎯 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




Tienes toda la razón. Permíteme corregir y explicar adecuadamente la estructura para controladores:

📝 Controladores - Estructura Correcta

Nombres de Clases (Controladores)

  • Caso: PascalCase

  • EstructuraSujeto/Objeto (Sustantivo) + Controller

  • SufijoController

  • NúmeroSustantivo 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)

📋 Resumen Corregido

ElementoEstructuraEjemploExplicación
ControladorSustantivo Plural + ControllerUsersControllerManeja colección de usuarios
Método RESTVerboindex()store()Acción sobre el recurso principal
Método PersonalizadoVerbo + Sustantivoactivate()updateProfile()Acción específica o sobre sub-recurso
ModeloSustantivo SingularUserRepresenta una instancia única
Tabla BDSustantivo Plural snake_caseusersAlmacena múltiples instancias

🔄 Relación entre Componentes

text
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

8-Creación de una API RESTful con Laravel

02 -Rutas en Laravel

3-Rutas