Skip to content

Commit 91471e5

Browse files
committed
Actualizadas las correcciones de la semana
1 parent 705ce00 commit 91471e5

File tree

258 files changed

+1352
-544
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

258 files changed

+1352
-544
lines changed

_sources/book/doctrine.txt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,10 @@ Para que *Doctrine* sea capaz de hacer esto, sólo hay que crear "metadatos", o
202202

203203
.. caution::
204204

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*.
206209

207210
.. note::
208211

@@ -1112,3 +1115,5 @@ Para más información acerca de *Doctrine*, ve la sección *Doctrine* del :doc:
11121115
.. _`Asignando propiedades`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#property-mapping
11131116
.. _`Ciclo de vida de los eventos`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html#lifecycle-events
11141117
.. _`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
1118+
.. _`Clases persistentes`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#persistent-classes
1119+
.. _`Asignación de propiedades`: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#property-mapping

_sources/book/translation.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,7 @@ Al traducir un mensaje, *Symfony2* utiliza la configuración regional de la peti
694694
'fr_FR',
695695
);
696696

697-
$this->get('translator')->trans(
697+
$this->get('translator')->transChoice(
698698
'{0} There are no apples|{1} There is one apple|]1,Inf[ There are %count% apples',
699699
10,
700700
array('%count%' => 10),

_sources/bundles/DoctrineMongoDBBundle/index.txt

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,48 +22,38 @@ Está disponible el paquete que integra el *ODM MongoDB de Doctrine* en *Symfony
2222
Instalando
2323
----------
2424

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*.
2626

27-
.. code-block:: text
27+
Instalando el paquete con ``Composer``
28+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2829

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`::
3131

32-
[doctrine-mongodb-odm]
33-
git=http://github.com/doctrine/mongodb-odm.git
34-
35-
[DoctrineMongoDBBundle]
36-
git=http://github.com/doctrine/DoctrineMongoDBBundle.git
37-
target=/bundles/Doctrine/Bundle/MongoDBBundle
32+
{
33+
require: {
34+
"doctrine/mongodb-odm-bundle": "dev-master"
35+
}
36+
}
3837

39-
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``:
4039

4140
.. code-block:: bash
4241

43-
$ php bin/vendors install
42+
php composer.phar update
4443

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.
4745

48-
// app/autoload.php
49-
$loader->registerNamespaces(array(
50-
// ...
51-
'Doctrine\\Bundle' => __DIR__.'/../vendor/bundles',
52-
'Doctrine\\Common' => __DIR__.'/../vendor/doctrine-common/lib',
53-
'Doctrine\\ODM\\MongoDB' => __DIR__.'/../vendor/doctrine-mongodb-odm/lib',
54-
'Doctrine\\MongoDB' => __DIR__.'/../vendor/doctrine-mongodb/lib',
55-
'Doctrine' => __DIR__.'/../vendor/doctrine/lib',
56-
// ...
57-
));
46+
Registrando las anotaciones y el paquete
47+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5848

5949
A continuación, registra la biblioteca de anotaciones añadiendo las siguientes acciones al cargador (debajo de la línea ``AnnotationRegistry::registerFile`` existente)::
6050

6151
// app/autoload.php
6252
AnnotationRegistry::registerFile(
63-
__DIR__.'/../vendor/doctrine-mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/DoctrineAnnotations.php'
53+
__DIR__.'/../vendor/doctrine/mongodb-odm/lib/Doctrine/ODM/MongoDB/Mapping/Annotations/DoctrineAnnotations.php'
6454
);
6555

66-
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::
6757

6858
// app/AppKernel.php
6959
public function registerBundles()
@@ -99,7 +89,7 @@ Para empezar, necesitarás una estructura básica que configure el gestor de doc
9989

10090
.. note::
10191

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*.
10393

10494
Un sencillo ejemplo: Un producto
10595
--------------------------------
@@ -468,7 +458,7 @@ A continuación, agrega un nuevo método --- ``findAllOrderedByName()`` --- a la
468458

469459
Puedes utilizar este nuevo método al igual que los métodos de búsqueda predeterminados del repositorio::
470460

471-
$product = $this->get('doctrine.odm.mongodb.document_manager')
461+
$products = $this->get('doctrine.odm.mongodb.document_manager')
472462
->getRepository('AcmeStoreBundle:Product')
473463
->findAllOrderedByName();
474464

@@ -583,7 +573,7 @@ En *Symfony*, puedes registrar un escucha o suscriptor creando un :term:`servici
583573
));
584574
$container->setDefinition('my_doctrine_listener', $definition);
585575

586-
* **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``;
587577
No obstante, dispone de los atributos ``connection``, ``priority`` y ``lazy``.
588578

589579
.. note::
@@ -593,7 +583,7 @@ En *Symfony*, puedes registrar un escucha o suscriptor creando un :term:`servici
593583
Integrando el ``SecurityBundle``
594584
--------------------------------
595585

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>`
597587

598588
.. configuration-block::
599589

@@ -616,9 +606,9 @@ Un proveedor de usuario está disponible para los documentos ``MongoDB``, trabaj
616606
Resumen
617607
-------
618608

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*.
620610

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.
622612

623613
Aprende más en el recetario
624614
---------------------------

_sources/components/console.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ Llamar a una orden desde otra es sencillo::
306306
// ...
307307
}
308308

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.
310310

311311
Entonces, es necesario crear una nueva clase :class:`Symfony\\Component\\Console\\Input\\ArrayInput` con los argumentos y opciones que desees pasar a la orden.
312312

_sources/components/dependency_injection/compilation.txt

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,48 @@ Para crear un pase del compilador tienes que implementar la interfaz :class:`Sym
1717

1818
El pase del compilador debe tener el método ``process`` que se pasa al contenedor compilado::
1919

20-
public function process(ContainerBuilder $container)
20+
class CustomCompilerPass
2121
{
22-
//--
22+
public function process(ContainerBuilder $container)
23+
{
24+
//--
25+
}
2326
}
2427

2528
Los parámetros del contenedor y las definiciones se pueden manipular usando los métodos descritos en :doc:`/components/dependency_injection/definitions`.
2629
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.
2730

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;
37+
38+
$container = new ContainerBuilder();
39+
$container->addCompilerPass(new CustomCompilerPass);
40+
41+
Controlando el orden de los pases
42+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
43+
44+
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;
57+
58+
$container = new ContainerBuilder();
59+
$container->addCompilerPass(new CustomCompilerPass, PassConfig::TYPE_AFTER_REMOVING);
60+
61+
2862
Gestionando la configuración con extensiones
2963
--------------------------------------------
3064

@@ -42,3 +76,70 @@ Las extensiones no agregan configuración a los contenedores cuando se añaden,
4276
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.
4377
En su lugar, debes utilizar un pase del compilador que trabaje con el contenedor completo después de haber procesado las extensiones.
4478

79+
Vertiendo la configuración para mejorar el rendimiento
80+
------------------------------------------------------
81+
82+
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::
108+
109+
// ...
110+
$file = __DIR__ .'/cache/container.php';
111+
112+
if (file_exists($file)) {
113+
require_once $file;
114+
$container = new MyCachedContainer();
115+
} else {
116+
$container = new ContainerBuilder();
117+
//--
118+
$container->compile();
119+
120+
$dumper = new PhpDumper($container);
121+
file_put_contents($file, $dumper->dump(array('class' => 'MyCachedContainer')));
122+
}
123+
124+
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
129+
130+
$file = __DIR__ .'/cache/container.php';
131+
132+
if (!$isDebug && file_exists($file)) {
133+
require_once $file;
134+
$container = new MyCachedContainer();
135+
} else {
136+
$container = new ContainerBuilder();
137+
//--
138+
$container->compile();
139+
140+
if(!$isDebug)
141+
$dumper = new PhpDumper($container);
142+
file_put_contents($file, $dumper->dump(array('class' => 'MyCachedContainer')));
143+
}
144+
}
145+

_sources/components/dependency_injection/index.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Inyección de dependencias
77
introduction
88
definitions
99
compilation
10+
tags
1011
factories
1112
parentservices
1213

_sources/components/dependency_injection/introduction.txt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -326,10 +326,3 @@ Ahora obtendrás la velocidad del contenedor *PHP* configurado con ---los fácil
326326
file_put_contents($file, $dumper->dump(array('class' => 'MyCachedContainer')));
327327
}
328328
}
329-
330-
Aprende más de este componente
331-
------------------------------
332-
333-
* :doc:`/components/dependency_injection/definitions`
334-
* :doc:`/components/dependency_injection/factories`
335-
* :doc:`/components/dependency_injection/parentservices`

0 commit comments

Comments
 (0)