# Convenciones

### **Convenciones de Ligne**

Si bien toma un poco de tiempo aprender las convenciones de Ligne, a la larga se ahorra tiempo. Al seguir las convenciones, obtiene funcionalidad gratuita y se libera de la pesadilla de mantenimiento de los archivos de configuración. Las convenciones también hacen que la experiencia de desarrollo sea muy uniforme, permitiendo a otros desarrolladores participar y ayudar.

### **Convención de nombre controladores**

Los controladores deben tener un nombre de clase valido para ello deben nombrarse con un nombre y un apellido en UpperCamelCase, TasksController, UsersController, AdminController, pero jamás con nombres compuestos. Los nombres de archivos para los controladores deben ser el mismo que la clase que lo compone.

Localhost\
\|--src \
\|   |---controllers |\
&#x20;        \|---UsersController.php

Los métodos públicos en los Controladores a menudo se exponen como `acciones` accesibles a través de un navegador web. Por ejemplo, <http://example.com/app/tasks/create/donde> `tasks` es el `controlador` y `create` es la `acción`.

### **Consideraciones de URL para nombres de controladores**

Como acaba de ver, los controladores de una sola palabra se asignan a una ruta URL simple en minúsculas. Por ejemplo, se accede desde `TasksController` a la acción `edit` con un parámetro igual a `7` (que se definiría en el nombre de archivo `TasksController.php` )

**`http://example.com/users`**

![](https://3217822112-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LkKIWztI5ewoBaqGBzj%2F-LkKfDj2eOqikuT-rXlz%2F-LkKh2mSwMTsxL-5kFcm%2Fimage.png?alt=media\&token=5184933e-bd7d-4c71-a219-19ae0af372ac)

Note que la palabra `Controller` no debe ser ingresada en al URL a la hora de hacer referencia a un controlador.

### **Convenciones de herencia**

Controladores

No es obligatorio que los controladores hereden de la clase `Controller` pero si estos no lo hacen no tendrán los privilegios de métodos como `render`, `setData` entre otros.

Modelos

Los modelos deben heredar de la clase maestra `Model` para tener acceso a los métodos de consultas a base de datos.

```php
<?php

namespace App\models\Tasks;

use System\Model;

class Tasks extends Model
{
    //…
}

```

### Convención de namespace y modelos

Todas las clases dentro del directorio `src` deben contener el prefijo `App` en su `namespace`; Ejemplo: Para un model task su namespace seria

```php
namespace App\models\Tasks;
```

Por consiguiente la clase de este modelo sería algo como esto;

```php
<?php


namespace App\models\Tasks;

use System\Model;

class Tasks extends Model
{
    public function tasks(){
        return $this->db()->table('tasks')->getAll();
    }
}

```

### Convención de vistas

Todas las vistas asociadas a un controlador `TasksController` deben ir en un directorio con el nombre en minúsculas sin el apellido `Controller`.

\|--src \
\|   |---views \
\|         |---tasks \
\|              |--edit.php \
\|              |--add.php
