Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spanish translation #32

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
41 changes: 41 additions & 0 deletions es/configurar-monolog.md
@@ -0,0 +1,41 @@
Configurar Monolog
seguridad
El componente que genera los logs de tu aplicación en esencial para gestionar tu plataforma web. Symfony implementa el componente Monolog dedicado a esta tarea.

La configuración por defecto está bien para el entorno de desarrollo, pero no es suficiente para el de producción.

Los cambios a realizar tienen dos objetivos:

* Enviar errores por email al administrador del sitio web (logs de nivel "error");
* Registrar _todas_ las autenticaciones, ya que estos son los logs de nivel "info", que no están registrados por defecto.

Monolog se configura a través del archivo `config_prod.yml`:

monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: grouped
grouped:
type: group
members: [streamed, swift]
streamed:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
swift:
type: swift_mailer
from_email: FQN@foo.com
to_email: webmaster@company.com
subject: "OOps"
level: debug
login:
type: stream
path: "%kernel.logs_dir%/auth.log"
level: info
channels: security

Listo!

* _Ver [Documentación de Symfony2 Monolog](http://symfony.com/doc/master/cookbook/logging/monolog.html)_
7 changes: 7 additions & 0 deletions es/garantizar-clave-secreta.md
@@ -0,0 +1,7 @@
Garantizar una clave secreta real
seguridad
Asegúrate de que tu entorno de producción está utilizando una clave secreta. Revísalo en tu archivo `app/config/parameters.yml`:

secret: please_use_a_real_secret_here

La clave por defecto no es en realidad secreta, debs cambiarla por una aleatoria.
31 changes: 31 additions & 0 deletions es/instalar-un-acelerador-php.md
@@ -0,0 +1,31 @@
Instalar un acelerador PHP
rendimiento
Symfony es un framework flexible y potente...que acaba teniendo un tiempo de ejecución muy lento. Por supuesto, el entorno de producción es mucho más rápido que tu entorno habitual de desarrollo, pero no es suficiente.

Con el fin de de impulsar el rendimiento de la aplicación en producción, es _muy recomendable_ instalar un acelerador PHP como APC.

### En un servidor dedicado

#### En Linux
Para instalar APC en una distribución Linux como Debian, simplemente ejecuta:

apt-get install php-apc

Adapta el comando a tu distribución.

#### En Windows
Descomenta la línea correspondiente en tu `php.ini`:

extension=php_apc.dll

#### En todos los casos
Después de la instalación, hay que activar la extensión. Esto se hace añadiendo esta línea al final de tu archivo `php.ini`:

[APC]
apc.enabled=1

### En un hosting compartido

Si estás utilizando un hosting compartido, no debes tener acceso por SSH. En ese caso, la mejor opción es contactar con el administrador. Dile que es mejor para sus servidores que tenga instalado un acelerador PHP.

* _Ver [APC en la documentación de PHP](http://php.net/manual/es/book.apc.php)_
13 changes: 13 additions & 0 deletions es/optimizar-autoloader.md
@@ -0,0 +1,13 @@
Optimizar el Autoloader
rendimiento
Por defecto, Composer vuelca un autoloader que no está completamente optimizado. De hecho, cuando tienes muchas clases, el autoloader puede tardar un tiempo considerable.

En el entorno de producción, quieres que el autoloader sea rápido. Composer puede volcar un autoloader optimizado que convierte los paquetes PSR-0 en *ClassMap*, las cuales mejoran el rendimiento.

Para utilizar el autoloader optimizado, sólo tienes que añadir la opción `--optimize` al comando de Composer `dump-autoload`:

php composer.phar dump-autoload --optimize

Por supuesto, esta opción hace que el comando tarde un poco más. Por eso no se hace de forma predeterminada.

* _Ver [Documentación de Composer volcar-autoload](http://getcomposer.org/doc/03-cli.md#dump-autoload)_
12 changes: 12 additions & 0 deletions es/personalizar-paginas-error.md
@@ -0,0 +1,12 @@
Personalizar páginas de error
base
Si estás habituado a las páginas de error del entorno `dev`, es de esperar que no será el caso de tus futuros visitantes en tu sitio web de producción. Por tanto, debes personalizar las diferentes páginas de error, con la intención de integrarlas en tu propio diseño.

Afortunadamente, personalizar páginas de error es muy fácil. Las vistas están localizadas en el bundle `TwigBundle`, que te da la clave para sobresccribirlas con las tuyas. Las vistas que tienes que crear son `Exception/errorXXX.html.twig`, donde `XXX` es el número del error encontrado. Es altamente recomendable personalizar al menos los errores 404 y 500.

Para utilizar tus propias vistas, hay dos posibles soluciones:

1. Puedes crear un nuevo bundle, que extienda de `TwigBundle`, y añadir tus propias plantillas en el directorio `Resources/views/Exception/errorXXX.html.twig`. Eso te permite utilizarlas en otros proyectos, ya que es un bundle reutilizable.
2. También puede simplemente añadir tus vistas en el directorio `app/Resources/TwigBundle/views/Exception/errorXXX.html.twig`. Si tus vistas son específicas para el proyeto actual, para evitar tener que crear un bundle sólo para eso.

* Ver [Documentación para personalizar páginas de error en Symfony](http://symfony.com/doc/master/cookbook/controller/error_pages.html)
30 changes: 30 additions & 0 deletions es/protege-tus-formularios.md
@@ -0,0 +1,30 @@
Protege tus formularios
seguridad
El componente Form de Symfony2 incrusta y valida [CSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) tokens para ti.
Asegúrate de personalizar tu *secret key*, la cual es utilizada por el generador de token, en tu archivo `app/config/parameters.yml`:

secret: please_use_a_real_secret_here

Por otra parte, podrías configurar el token de forma fomulario-por-formulario, que es incluso mejor. Puedes hacerlo definiendo una opción `intention` en tus formularios:

namespace Acme\DemoBundle\Form;

use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class TaskType extends AbstractType
{
// ...

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
// a unique key to help generate the secret token
'intention' => 'task_form',
));
}

// ...
}

* Ver [Docummentación de protección CSRF Symfony2 Form](http://symfony.com/doc/current/book/forms.html#csrf-protection)
* Ver [CSRF en wikipedia](https://es.wikipedia.org/wiki/Cross_Site_Request_Forgery)
9 changes: 9 additions & 0 deletions es/revisar-entorno-produccion.md
@@ -0,0 +1,9 @@
Revisar el sevidor de producción
base
Antes de desplegar tu aplicación, debes comprobar que tu servidor de producción está listo para ejecutarla.

Para testear tu servidor puedes elegir entre 3 métodos:

1. Manualmente ejecutar `php app/check.php` y ver el resultado;
2. Accede a `config.php` con tu navegador, dentro del directorio `web`;
3. Si aún no tienes acceso al servidor (estás pensando en comprarlo), puedes ir a la [página de referencia en la documentación](http://symfony.com/doc/current/reference/requirements.html).
59 changes: 59 additions & 0 deletions es/utilizar-cache-doctrine.md
@@ -0,0 +1,59 @@
Utilizar la cache de Doctrine
rendimiento
En el entorno de producción, es _altamente recomendable_ utilizar la cache de Doctrine. Hay dos tipos de cache.

### Cache de consulta y metadatos

* La cache de consulta tiene como objetivo el almacenamiento en cache de la transformación de una consulta DQL en contrapartida a SQL. En producción, tus peticiones no cambiarán ni un ápice así que, ¿por qué no cachearlas?

* La cache de metadatos tiene como objetivo el almacenamiento en cache de metadatos analizados desde diferentes fuentes como YAML, XML, Anotaciones, etc.

Se puede cachear esta información estableciendo algunos parámetros en tu archivo de configuración de producción `config_prod.yml`:

doctrine:
orm:
auto_mapping: true
query_cache_driver: apc
metadata_cache_driver: apc

### Cache de resultado

El resultado de tus consultas puede ser cacheado para no hacer peticiones a la base de datos una y otra vez.

Como se trata de una puesta a punto más fina, no se puede parametrizar toda la aplicación. Sólo puedes configurar el conductor como en el caso anterior:

doctrine:
orm:
auto_mapping: true
result_cache_driver: apc

Pero de esta forma, tienes que utilizar de manera explícita o no esta cache en todas las consultas mayores. Esto se hace configurando el nombre y tiempo de vida de cada consulta de cache. Ver [Documentación del resultado de la Cache de Doctrine ](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html#result-cache).

### Asegurarse de que Doctrine realmente está utilizando la cache APC

Ya tienes configurado APC como conductor de la cache de Doctrine, genial. Pero el problema es que el Contenedor de Inyección de Dependencias se genera a través de la Interfaz de Línea de Comandos, cuando la cache, se va a construir a partir de ahí. Y si no tienes `apc.enable_cli = 1` en tu `php.ini`, el Contenedor de Inyección de Dependencias utilizará `FileCacheReader` en su lugar. Eso no es lo que queremos.

Para comprobar que realmente estás utilizando APC cache, tienes que mirar en tu `app/cache/prod/appProdProjectContainer.php`. Deberías ver lo siguiente:

protected function getDoctrine_Orm_DefaultEntityManagerService()
{
$a = $this->get('annotation_reader');
$b = new \Doctrine\Common\Cache\ApcCache();
$b->setNamespace('sf2orm_default_5cdc3404d84577b226d7772ca9818908');
$c = new \Doctrine\Common\Cache\ApcCache();
$c->setNamespace('sf2orm_default_5cdc3404d84577b226d7772ca9818908');

// ...

$g = new \Doctrine\ORM\Configuration();
$g->setMetadataCacheImpl($b);
$g->setQueryCacheImpl($c);

// ...
}

Si no puedes encontrar `\Doctrine\Common\Cache\ApcCache`, entonces es que no estás utilizando APC.

* _Ver [Documentación de Doctrine Cache](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/caching.html)_
* _Ver [Symfony2 Doctrine configuration reference](http://symfony.com/doc/current/reference/configuration/doctrine.html)_
* _Ver [Estás utilizando APC cache con Doctrine y Symfony? Compruébalo otra vez](http://gogs.info/2013/05/using-apc-cache-with-doctrine-symfony)_
10 changes: 10 additions & 0 deletions es/utilizar-favicon-personalizado.md
@@ -0,0 +1,10 @@
Utilizar un Favicon personalizado
base
Seguro que no quieres que el logo de Symfony aparezca en el navegador de tus vistantes. Ése es el motivo por el que debes remplazar el favicon que viene por defecto por el tuyo propio antes del despliegue.

Simplemente sustituye el archivo `web/favicon.ico`.

Para generar favicons, puedes:

* Utilizar herramientas online como [favicon.cc](http://www.favicon.cc) con el fin de generar archivos `.ico`;
* Utilizar un PNG como icono. En ese caso debes definir un `link` en tu HTML: `<link rel="icon" type="image/png" href="tuFavicon.png">`