The symfony and Doctrine book

Capítulo 3 - Configuración

You are currently browsing
the website for symfony 1

Visit the Symfony2 website


About

You are currently reading "The symfony and Doctrine book" which is licensed under the GFDL license.

Master symfony

Be trained by SensioLabs experts (2 to 6 day sessions -- French or English).
trainings.sensiolabs.com

Books on symfony

Learn more about symfony with the official guides.
books.sensiolabs.com

L'audit Qualité par SensioLabs

200 points de contrôle de votre applicatif web.
audit.sensiolabs.com

Chapter Content

Atributos

Global

Todas las Conexiones

Modelo

Configurando la Contrucción del Modelo

Personalizar el Doctrine Library Path

symfony training
Be trained by symfony experts
May 29: Paris (Web Development with Symfony2 - Français)
May 31: Paris (Mastering Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - Français)
Jun 06: Paris (Introduction to Symfony2 - English)
Jun 06: Paris (Going Further with Symfony2 - English)
and more...

Search


powered by google
You are currently browsing "The symfony and Doctrine book" in Spanish for the 1.2 version - Switch to language:
This work is licensed under a GFDL license.
This version of symfony is not maintained anymore.
If some of your projects still use this version, consider upgrading as soon as possible.

Atributos

Doctrine controla las características y configuraciones con atributos. Los atributos puede ser definidos a diferentes niveles de una jerarquía. Algunos atributos pueden ser especificados para todos los niveles y otros no. Debajo se explica como puedes especificar atributos para cada nivel. Los atributos pueden ser especificados globalmente, sobre cada conexión, o sobre cada modelo individual.

En symfony puedes controlar la configuración de Doctrine en tu config/ProjectConfiguration.class.php o en tu apps/appname/config/appnameConfiguration.class.php

Global

Puedes controlar atributos globales creando un configureDoctrine() en tu configuración. Todos los atributos globales son configurados sobre una instancia singleton Doctrine_Manager. Este método es invocado cuando el sfDoctrinePlugin config.php es cargado. Esto es antes de cualquier conexion exista por eso solo el atributo Doctrine_Manager puede ser controlado en este punto.

public function configureDoctrine(Doctrine_Manager $manager)
{
  $manager->setAttribute('use_dql_callbacks', true);
  $manager->setAttribute('use_native_enum', true);
}

Todas las Conexiones

Puedes controlar atributos por conecxión creando un configureDoctrineConnection() en tu clase de configuración. Este método es invocado en sfDoctrineDatabase con cada conexión sea instanciada por Symfony en el orden que ellas estén en config/databases.yml.

public function configureDoctrineConnection(Doctrine_Connection $connection)
{
  $connection->setAttribute('use_dql_callbacks', true);
  $connection->setAttribute('use_native_enum', true);
}

Puedes también opcionalmente especificar los atributos de la conexión directamente en la definición de la conexión en config/doctrine/databases.yml de esta manera:

doctrine:
   class: sfDoctrineDatabase
   param:
     dsn: 'mysql:host=localhost;dbname=dbname'
     username: user
     password: secret
     attributes:
       use_dql_callbacks: true
       use_native_enum:  true

Puedes querer tener una diferente configuración por cada conexión por lo que puedes crear una función específica que también sea invocada en cada conexión individual. Si tienes una conexión denominada master entonces necesitaras crear una función de nombre configureDoctrineConnectionMaster() en tu archivo config/ProjectConfiguration.class.php.

public function configureDoctrineConnectionMaster(Doctrine_Connection $connection)
{
  $connection->setAttribute('use_dql_callbacks', false);
  $connection->setAttribute('use_native_enum', false);
}

En el anterior ejemplo tenemos habilitado use_dql_callbacks y use_native_enum para cada conexión excepto la conexión denominada master habilitandola para todas las conexiones y deshabilitando los atributos especificamente para esa conexión.

Modelo

El último nivel de la jerarquía para Doctrine son los modelos. Los atributos pueden ser especificados directamente en la definición YAML del modelo.

Store:
  connection: client
  attributes:
    export: tables
  columns:
    name: string(255)
    description: string(500)

Puedes también establecer atributos usando código php en la clase generadad del modelo en lib/model/doctrine. Revisa lib/model/doctrine/Store.class.php y sobre-escribe setTableDefinition() para especificar algunos atributos adicionales.

public function setTableDefinition()
{
  parent::setTableDefinition();
  $this->setAttribute('export', 'tables');
}

Configurando la Contrucción del Modelo

sfDoctrinePlugin ofrece la capacidad de sobre-escribir algunos opciones de la contrucción del modelo. Estas configuraciones pueden ser controladas usando la clase sfConfig empleando el parámetro denominado doctrine_model_builder_options.

Aquí un ejemplo de como puedes cambiar la clase base usada cuando generas los modelos. Puedes establecerla usando la clase denominada myDoctrineRecord o la que quieras. Solo asegúrate de que la clase exista en algún lugar en tu proyecto para que la autocarga de Symfony la encuentre.

public function configureDoctrine(Doctrine_Manager $manager)
{
  $options = array('baseClassName' => 'myDoctrineRecord');
  sfConfig::set('doctrine_model_builder_options', $options);
}

Asegúrate de crear la clase. Por ejemplo, sfproject/lib/myDoctrineRecord.class.php con el siguiente código php.

class myDoctrineRecord extends sfDoctrineRecord
{
}

Ahora cuando generes tus modelos, todas las clases extenderan de myDoctrineRecord en lugar de sfDoctrineRecord por eso puedes agregar funcionalidades propias para todos tus modelos.

Aquí esta una lista de todas las otras opciones que pueden ser modificadas para diferentes valores del proceso de construcción del modelo.

Name Description Por Defecto
suffix Sufijo a usar para las clases generadas .class.php
generateBaseClasses Si o no para generar las clases bases true
generateTableClasses Si o no para generar las clases *Table true
baseClassPrefix Word to prefix base classes with Base
baseClassesDirectory Directorio para generar las clases bases base
baseClassName Super parent para extender los modelos sfDoctrineRecord

Personalizar el Doctrine Library Path

Con sfDoctrinePlugin es fácil cambiar la versión de Doctrine usada simplemente cambiando uno de los valores de configuración.

Debajo encontrarás un ejemplo de como puedes configurar sfDoctrinePlugin para usar una versión distinta de Doctrine, por ejemplo 1.0.10.

Primero necesitas verificar la versión de Doctrine que quieres usar en lib/vendor/doctrine:

$ mkdir lib/vendor
$ cd lib/vendor
$ svn co http://svn.doctrine-project.org/tags/1.0.10/lib doctrine

Ahora puedes configurar el sfDoctrinePlugin para usar esa versión de Doctrine en lugar de una que venga incluída en el plugin. En tu método ProjectConfiguration::setup() nececitarás cambiar el valor de sfDoctrinePlugin_doctrine_lib_path con sfConfig, como sigue:

public function setup()
{
  sfConfig::set('sfDoctrinePlugin_doctrine_lib_path', sfConfig::get('sf_lib_dir') . '/vendor/doctrine/Doctrine.php');
}

No todas las versiones de Doctrine son compatibles con el sfDoctrinePlugin de Symfony. Por ejemplo usando una versión mayor de Doctrine que la incluída con sfDoctrinePlugin no se garantiza que funcione muy bien.

TIP Puedes leer más acerca de conexiones en el Manual Doctrine aquí.

Chapter 4 - Schema Files »
« Capítulo 2 - Conexiones

Questions & Feedback

If you find a typo or an error, please register and open a ticket.

If you need support or have a technical question, please post to the official user mailing-list.