Buenas prácticas oficiales de Symfony

3.2. Configuración relacionada con la aplicación

Buena Práctica Define las opciones de configuración relacionadas con la aplicación en el archivo app/config/config.yml.

El archivo config.yml define las opciones que se utilizan para modificar el comportamiento de la aplicación, tales como el remitente de los emails de notificación, los feature toggles, etc. Definir estos valores en el archivo parameters.yml es posible, pero añadiría una capa adicional de configuración totalmente innecesaria, ya que normalmente no necesitas cambiar estos valores en función del servidor en el que se encuentre la aplicación.

Las opciones de configuración definidas en el archivo config.yml normalmente varían en función del entorno de ejecución. Por eso Symfony define dos archivos distintos llamados app/config/config_dev.yml y app/config/config_prod.yml para que puedas definir diferentes valores para cada entorno.

3.2.1. Constantes u opciones de configuración

Uno de los errores más habituales al definir la configuración de una aplicación consiste en añadir opciones para valores que nunca van a cambiar, como por ejemplo el número de elementos mostrados en una paginación.

Buena Práctica Utiliza constantes en vez de opciones de configuración para los valores que casi nunca varían.

La forma tradicional en la que se define la configuración de las aplicaciones ha hecho que muchas aplicaciones Symfony2 incluyan opciones como la siguiente, que controla cuantos artículos se muestran en la portada del blog:

# app/config/config.yml
parameters:
    homepage.num_items: 10

Si te preguntas cuándo fue la última vez que cambiaste el valor de una opción de este tipo, seguramente la respuesta será nunca jamás. Crear una opción para un valor que apenas cambia es absurdo. En estos casos es mucho mejor definir una constante en la clase apropiada. Así por ejemplo se puede definir la constante NUM_ITEMS en la clase que define la entidad Post:

// src/AppBundle/Entity/Post.php
namespace AppBundle\Entity;

class Post
{
    const NUM_ITEMS = 10;

    // ...
}

La principal ventaja de las constantes es que puedes utilizar sus valores en cualquier punto de la aplicación. Cuando defines parámetros de configuración, sólo puedes utilizarlos en los lugares en los que puedes acceder al contenedor de Symfony.

Así por ejemplo puedes acceder al valor de cualquier constante desde todas las plantillas Twig gracias a la función constant():

<p>
    Mostramos los {{ constant('NUM_ITEMS', post) }} artículos más recientes.
</p>

También puedes acceder a estos valores desde las clases de las entidades y los repositorios de Doctrine, que son lugares en los que habitualmente se necesitan estos valores y donde no es posible acceder al contenedor de Symfony:

namespace AppBundle\Repository;

use Doctrine\ORM\EntityRepository;
use AppBundle\Entity\Post;

class PostRepository extends EntityRepository
{
    public function findLatest($limit = Post::NUM_ITEMS)
    {
        // ...
    }
}

La única desventaja importante de usar constantes como opciones de configuración es que no puedes redefinirlas fácilmente en los tests de la aplicación.