You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _sources/book/doctrine.txt
+6-1Lines changed: 6 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -202,7 +202,10 @@ Para que *Doctrine* sea capaz de hacer esto, sólo hay que crear "metadatos", o
202
202
203
203
.. caution::
204
204
205
-
Ten cuidado de que tu nombre de clase y propiedades no estén asignados a un área protegida por palabras clave de ``SQL`` (tal como ``group`` o ``user``). Por ejemplo, si el nombre de clase de tu entidad es ``group``, entonces, de manera predeterminada, el nombre de la tabla será ``group``, lo cual provocará un error en algunos motores ``SQL``. Consulta la `Documentación de palabras clave reservadas por SQL`_ para que sepas cómo escapar correctamente estos nombres.
205
+
Ten cuidado de que tu nombre de clase y propiedades no estén asignados a un área protegida por palabras clave de ``SQL`` (tal como ``group`` o ``user``). Por ejemplo, si el nombre de clase de tu entidad es ``group``, entonces, de manera predeterminada, el nombre de la tabla será ``group``, lo cual provocará un error en algunos motores ``SQL``. Consulta la `Documentación de palabras clave reservadas por SQL`_ para que sepas cómo escapar correctamente estos nombres. Alternativamente, si estás en libertad de elegir el esquema
206
+
de tu base de datos, simplemente asigna un diferente nombre
207
+
de tabla o columna. Ve las `Clases persistentes`_ y la `Asignación de propiedades`_
208
+
en la documentación de *Doctrine*.
206
209
207
210
.. note::
208
211
@@ -1112,3 +1115,5 @@ Para más información acerca de *Doctrine*, ve la sección *Doctrine* del :doc:
.. _`Ciclo de vida de los eventos`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#lifecycle-events
1114
1117
.. _`Documentación de palabras clave reservadas por SQL`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#quoting-reserved-words
Copy file name to clipboardExpand all lines: _sources/bundles/DoctrineMongoDBBundle/index.txt
+22-32Lines changed: 22 additions & 32 deletions
Original file line number
Diff line number
Diff line change
@@ -22,48 +22,38 @@ Está disponible el paquete que integra el *ODM MongoDB de Doctrine* en *Symfony
22
22
Instalando
23
23
----------
24
24
25
-
Para utilizar el *ODM MongoDB*, necesitarás dos bibliotecas proporcionadas por *Doctrine* y un paquete que las integra en *Symfony*. Si estás usando la distribución estándar de *Symfony*, agrega lo siguiente al archivo ``deps`` en la raíz de tu proyecto:
25
+
Para utilizar el *ODM MongoDB*, necesitarás dos bibliotecas proporcionadas por *Doctrine* y un paquete que las integra en *Symfony*.
26
26
27
-
.. code-block:: text
27
+
Instalando el paquete con ``Composer``
28
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
28
29
29
-
[doctrine-mongodb]
30
-
git=http://github.com/doctrine/mongodb.git
30
+
Para instalar ``DoctrineMongoDBBundle`` con ``Composer`` sólo tienes que añadir lo siguiente a tu archivo `` :file:`composer.json`::
Ahora, actualiza las bibliotecas de proveedores ejecutando:
38
+
Luego, puedes instalar las nuevas dependencias ejecutando la orden ``update`` de ``Composer`` desde el directorio donde se encuentra el archivo ``composer.json``:
40
39
41
40
.. code-block:: bash
42
41
43
-
$ php bin/vendors install
42
+
php composer.phar update
44
43
45
-
A continuación, agrega los espacios de nombres ``Doctrine\ODM\MongoDB`` y ``Doctrine\MongoDB`` al archivo ``app/autoload.php`` para que estas bibliotecas se puedan cargar automáticamente.
46
-
Asegúrate de añadirlas en cualquier lugar *por encima* del espacio de nombres *Doctrine* (cómo se muestra aquí)::
44
+
Ahora, ``Composer`` automáticamente descargará todos los archivos necesarios y los instalará por ti.
A continuación, registra la biblioteca de anotaciones añadiendo las siguientes acciones al cargador (debajo de la línea ``AnnotationRegistry::registerFile`` existente)::
Por último, activa el nuevo paquete en el núcleo::
56
+
Todo lo que resta por hacer es actualizar tu archivo :file:`AppKernel.php`, y registrar el nuevo paquete::
67
57
68
58
// app/AppKernel.php
69
59
public function registerBundles()
@@ -99,7 +89,7 @@ Para empezar, necesitarás una estructura básica que configure el gestor de doc
99
89
100
90
.. note::
101
91
102
-
Por supuesto, también tienes que asegurarte de que se ejecute en segundo plano el servidor *MongoDB*. Para más información, consulta la `Guía de inicio rápido`_ de *MongoDB*.
92
+
Por supuesto, también te tienes que asegurar de que el servidor *MongoDB* se ejecute en segundo plano. Para más información, consulta la `Guía de inicio rápido`_ de *MongoDB*.
103
93
104
94
Un sencillo ejemplo: Un producto
105
95
--------------------------------
@@ -468,7 +458,7 @@ A continuación, agrega un nuevo método --- ``findAllOrderedByName()`` --- a la
468
458
469
459
Puedes utilizar este nuevo método al igual que los métodos de búsqueda predeterminados del repositorio::
* **suscriptor de evento**: Usa la etiqueta ``doctrine.odm.mongodb.event_subscriber`` para un suscriptor. Los suscriptores son responsables de implementar al ``Doctrine\Common\EventSubscriber`` y suplir un método que devuelva los eventos que escuchará. Por esta razón, esta etiqueta no tiene el atributo ``event``;
576
+
* **suscriptor de evento**: Usa la etiqueta ``doctrine.odm.mongodb.event_subscriber`` para registrar un suscriptor. Los suscriptores son responsables de implementar al ``Doctrine\Common\EventSubscriber`` y suplir un método que devuelva los eventos que escuchará. Por esta razón, esta etiqueta no tiene el atributo ``event``;
587
577
No obstante, dispone de los atributos ``connection``, ``priority`` y ``lazy``.
588
578
589
579
.. note::
@@ -593,7 +583,7 @@ En *Symfony*, puedes registrar un escucha o suscriptor creando un :term:`servici
593
583
Integrando el ``SecurityBundle``
594
584
--------------------------------
595
585
596
-
Un proveedor de usuario está disponible para los documentos ``MongoDB``, trabajando exactamente igual que el proveedor de ``entidad`` descrito en el :doc:`recetario </cookbook/security/entity_provider>`
586
+
Hay disponible un proveedor de usuarios para tus proyectos *MongoDB*, trabaja exactamente igual que el proveedor de entidades descrito en el :doc:`recetario </cookbook/security/entity_provider>`
597
587
598
588
.. configuration-block::
599
589
@@ -616,9 +606,9 @@ Un proveedor de usuario está disponible para los documentos ``MongoDB``, trabaj
616
606
Resumen
617
607
-------
618
608
619
-
Con *Doctrine*, te puedes enfocar en los objetos y la forma en que son útiles en tu aplicación y en segundo lugar preocuparte por la persistencia a través de *MongoDB*. Esto se debe a que *Doctrine* te permite utilizar cualquier objeto *PHP* para almacenar los datos y confía en la información de asignación de metadatos para asignar los datos de un objeto a una colección *MongoDB*.
609
+
Con *Doctrine*, te puedes enfocar en los objetos y la forma en que son útiles en tu aplicación y en segundo lugar preocuparte de su persistencia a través de *MongoDB*. Esto se debe a que *Doctrine* te permite utilizar cualquier objeto *PHP* para almacenar los datos y confía en la información de asignación de metadatos para asignar los datos de un objeto a una colección *MongoDB*.
620
610
621
-
Y aunque *Doctrine* gira en torno a un concepto simple, es increíblemente poderoso, permitiéndote crear consultas complejas y suscribirte a los eventos que te permiten realizar diferentes acciones conforme los objetos recorren su ciclo de vida en la persistencia.
611
+
Y aunque *Doctrine* gira en torno a un concepto simple, es increíblemente potente, permitiéndote crear consultas complejas y suscribirte a los eventos que te permiten realizar diferentes acciones conforme los objetos recorren su ciclo de vida en la persistencia.
Copy file name to clipboardExpand all lines: _sources/components/console.txt
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -306,7 +306,7 @@ Llamar a una orden desde otra es sencillo::
306
306
// ...
307
307
}
308
308
309
-
En primer lugar, :method:`Symfony\\Component\\Console\\Command\\Command::find` busca la orden que deseas ejecutar pasando el nombre de la orden.
309
+
En primer lugar, tu :method:`Symfony\\Component\\Console\\Application::find` busca la orden que deseas ejecutar pasando el nombre de la orden.
310
310
311
311
Entonces, es necesario crear una nueva clase :class:`Symfony\\Component\\Console\\Input\\ArrayInput` con los argumentos y opciones que desees pasar a la orden.
Copy file name to clipboardExpand all lines: _sources/components/dependency_injection/compilation.txt
+103-2Lines changed: 103 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -17,14 +17,48 @@ Para crear un pase del compilador tienes que implementar la interfaz :class:`Sym
17
17
18
18
El pase del compilador debe tener el método ``process`` que se pasa al contenedor compilado::
19
19
20
-
public function process(ContainerBuilder $container)
20
+
class CustomCompilerPass
21
21
{
22
-
//--
22
+
public function process(ContainerBuilder $container)
23
+
{
24
+
//--
25
+
}
23
26
}
24
27
25
28
Los parámetros del contenedor y las definiciones se pueden manipular usando los métodos descritos en :doc:`/components/dependency_injection/definitions`.
26
29
Una cosa común por hacer en un pase del compilador es buscar todos los servicios que tienen una determinada etiqueta, a fin de procesarla de alguna manera o dinámicamente conectar cada una con algún otro servicio.
27
30
31
+
Registrando un pase del compilador
32
+
----------------------------------
33
+
34
+
Necesitas registrar tu pase personalizado del compilador en el contenedor. El método procesará la llamada cuando el contenedor es compilado::
35
+
36
+
use Symfony\Component\DependencyInjection\ContainerBuilder;
Los pases predeterminados del compilador se agrupan en pases de optimización y pases de remoción. Los pases de optimización se ejecutan primero e incluyen tareas como la resolución de referencias con las definiciones. Los pases de remoción realizan tareas tales como la eliminación de alias privados y servicios no utilizados. Puedes elegir en qué orden se ejecutará cualquier pase personalizado que añadas. De manera predeterminada, se ejecutará antes de los pases de optimización.
45
+
46
+
Puedes utilizar las siguientes constantes como segundo argumento al registrar un pase en el contenedor para controlar en qué orden va:
47
+
48
+
* ``PassConfig::TYPE_BEFORE_OPTIMIZATION``
49
+
* ``PassConfig::TYPE_OPTIMIZE``
50
+
* ``PassConfig::TYPE_BEFORE_REMOVING``
51
+
* ``PassConfig::TYPE_REMOVE``
52
+
* ``PassConfig::TYPE_AFTER_REMOVING``
53
+
54
+
Por ejemplo, para correr tu pase personalizado después de quitar el pase predeterminado tienes que ejecutar::
55
+
56
+
use Symfony\Component\DependencyInjection\ContainerBuilder;
@@ -42,3 +76,70 @@ Las extensiones no agregan configuración a los contenedores cuando se añaden,
42
76
Si necesitas manipular la configuración cargada por una extensión, entonces no lo puedes hacer desde otra extensión, ya que esta utiliza un contenedor nuevo.
43
77
En su lugar, debes utilizar un pase del compilador que trabaje con el contenedor completo después de haber procesado las extensiones.
44
78
79
+
Vertiendo la configuración para mejorar el rendimiento
Puede ser mucho más fácil entender el uso de los archivos de configuración para gestionar el contenedor de servicios que usar *PHP* una vez que hay una gran cantidad de servicios. Esta facilidad tiene un costo, aunque cuando se trata de rendimiento, puesto que los archivos de configuración se tienen que analizar y la configuración de *PHP* construida desde ellos. El proceso de compilación hace más eficiente al contenedor pero toma tiempo su ejecución. Puedes tener lo mejor de ambos mundos aunque usando archivos de configuración y, luego vertiendo y almacenando en caché la configuración resultante. El ``PhpDumper`` fácilmente vierte el contenedor compilado::
83
+
84
+
use Symfony\Component\DependencyInjection\ContainerBuilder;
85
+
use Symfony\Component\Config\FileLocator;
86
+
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
87
+
use Symfony\Component\DependencyInjection\Dumper\PhpDumper
88
+
89
+
$container = new ContainerBuilder();
90
+
$loader = new XmlFileLoader($container, new FileLocator(__DIR__));
91
+
$loader->load('services.xml');
92
+
93
+
$file = __DIR__ .'/cache/container.php';
94
+
95
+
if (file_exists($file)) {
96
+
require_once $file;
97
+
$container = new ProjectServiceContiner();
98
+
} else {
99
+
$container = new ContainerBuilder();
100
+
//--
101
+
$container->compile();
102
+
103
+
$dumper = new PhpDumper($container);
104
+
file_put_contents($file, $dumper->dump());
105
+
}
106
+
107
+
``ProjectServiceContiner`` es el nombre predefinido dado a la clase contenedora vertida, lo puedes cambiar con la opción ``class`` cuando lo viertes::
Ahora obtendrás la velocidad del contenedor *PHP* configurado con ---los fáciles de usar--- archivos de configuración. En el ejemplo anterior tendrás que borrar los archivos del contenedor memorizados en caché cada vez que hagas algún cambio. Añadir una comprobación por una variable que determina si estás en modo de depuración te permite mantener la velocidad del contenedor memorizado en caché en la producción, sino consiguiendo una actualización de la configuración, mientras desarrollas tu aplicación::
125
+
126
+
// ...
127
+
128
+
// establece $isDebug basándose en algo de tu proyecto
0 commit comments