# 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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ligne-framework.gitbook.io/ligne-framework-php/master/documentacion/convenciones.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
