mkdir src/Petramas/MyFOSUserBundle/Resources/translations/
viernes, 25 de octubre de 2013
FOSUserBundle - Parte VIII - Overriding Translations
De igual modo se pueden sustituir las traducciones:
FOSUserBundle - Parte VII - Overriding Login
Como nuestro formulario de login lo renderizaremos dentro de nuestro menú superior, en el caso de que no este logueado el usuario, entonces no va a tener que heredar de PetramasMainBundle:layout.html.twig porque si no tendríamos la página dentro de la misma página ocasionando un conflicto.
por lo tanto copiamos el archivo login.html.twig:
por lo tanto copiamos el archivo login.html.twig:
mkdir src/Peteramas/MyFOSUserBundle/Resources/views/Security/
FOSUserBundle - Parte VI - Overriding Resetting
Aquí son 4 archivos a sustituir:
checkEmail.html.twig
passwordAlreadyRequested.html.twig
request_content.html.twig
reset_content.html.twig
checkEmail.html.twig
passwordAlreadyRequested.html.twig
request_content.html.twig
reset_content.html.twig
mkdir src/Peteramas/MyFOSUserBundle/Resources/views/Resetting/
FOSUserBundle - Parte V - Overriding Profile y Change Password
Ahora vamos a sustituir las plantillas del perfil y de cambiar la contraseña:
mkdir src/Peteramas/MyFOSUserBundle/Resources/views/Profile/ cp vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Resources/views/Profile/show_content.html.twig src/Peteramas/MyFOSUserBundle/Resources/views/Profile/
FOSUserBundle - Parte IV - Overriding Registration
Si empezamos a usar las rutas del FOSUserBundle nos daremos cuenta que todas funcionan. Las rutas pueden ser tomadas usando el comando de Symfony router debug:
php app/console router:debug
php app/console router:debug
fos_user_security_login ANY ANY ANY /login fos_user_security_check POST ANY ANY /login_check fos_user_security_logout ANY ANY ANY /logout fos_user_profile_show GET ANY ANY /profile/ fos_user_profile_edit ANY ANY ANY /profile/edit fos_user_registration_register ANY ANY ANY /register/ fos_user_registration_check_email GET ANY ANY /register/check-email fos_user_registration_confirm GET ANY ANY /register/confirm/{token} fos_user_registration_confirmed GET ANY ANY /register/confirmed fos_user_resetting_request GET ANY ANY /resetting/request fos_user_resetting_send_email POST ANY ANY /resetting/send-email fos_user_resetting_check_email GET ANY ANY /resetting/check-email fos_user_resetting_reset GET|POST ANY ANY /resetting/reset/{token} fos_user_change_password GET|POST ANY ANY /profile/change-password
FOSUserBundle - Parte III - Sustitución de plantillas (Overriding Templates) - layout.html.twig
El modo de sustituir plantillas hechas en FOSUserBundle es muy sencillo, teniendo nuestro bundle hijo de éste.
Tenemos que fijarnos dentro de la carpeta:
Tenemos que fijarnos dentro de la carpeta:
"vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Resources/views"
FOSUserBundle - Parte II - Creación del Child Bundle
Para poder modificar las plantillas que vienen por defecto en FOSUserBundle, es necesario crear un bundle que sólo se encargará de recoger todas las modificaciones hechas, dejando nuestro MainBundle tal como está.
el cuál ejecuta una consola interactiva para la creación de bundles e iremos respondiendo una a una las preguntas:
luego se debe indicar a éste bundle creado que heredará de FOSUserBundle, editando el archivoPetramasMyFOSUserBundle.php
y agregando return 'FOSUserBundle'; dentro de la función getParent:
php app/console generate:bundle
el cuál ejecuta una consola interactiva para la creación de bundles e iremos respondiendo una a una las preguntas:
Bundle namespace: Petramas/MyFOSUserBundle Bundle name [PetramasMyFOSUserBundle]: Target directory [/home/joerobles/NetBeansProjects/petramas/src]: Configuration format (yml, xml, php, or annotation): annotation Do you want to generate the whole directory structure [no]? yes Do you confirm generation [yes]? Confirm automatic update of your Kernel [yes]? Confirm automatic update of the Routing [yes]?
luego se debe indicar a éste bundle creado que heredará de FOSUserBundle, editando el archivoPetramasMyFOSUserBundle.php
nano src/Petramas/MyFOSUserBundle/PetramasMyFOSUserBundle.php
y agregando return 'FOSUserBundle'; dentro de la función getParent:
public function getParent() { return 'FOSUserBundle'; }
viernes, 18 de octubre de 2013
martes, 15 de octubre de 2013
Mensajes de confirmación (Flash messages) Bootstrap 3 en Symfony2
Nuestros formularios funcionan, lo que le falta es el retorno o mensajes de confirmación de las acciones: Crear, Editar, Eliminar; para que el usuario tenga la certeza de que su acción ha sido ejecutada satisfactoriamente.
Para esto Symfony tiene "Flash bag" (antes "Flash message"), y Bootstrap tiene alerts, lo implementaremos en 2 pasos
1.- Agregar el flashbag a los controladores createAction, updateAction y deleteAction siempre después de:
createAction:
updateAction
deleteAction
2.- Agregar en el layout al comienzo del body:
Si hay flash entonces lo itera y muestra:
Para esto Symfony tiene "Flash bag" (antes "Flash message"), y Bootstrap tiene alerts, lo implementaremos en 2 pasos
1.- Agregar el flashbag a los controladores createAction, updateAction y deleteAction siempre después de:
$em->flush();
createAction:
$this->get('session')->getFlashBag()->set( 'success', array( 'title' => 'Nuevo!', 'message' => 'Cliente creado con éxito.' ) );
updateAction
$this->get('session')->getFlashBag()->set( 'success', array( 'title' => 'Editado!', 'message' => 'Cliente actualizado satisfactoriamente.' ) );
deleteAction
$this->get('session')->getFlashBag()->set( 'success', array( 'title' => 'Eliminado!', 'message' => 'Cliente removido.' ) );
2.- Agregar en el layout al comienzo del body:
{% block body -%} {# aquí va el siguiente código #}
Si hay flash entonces lo itera y muestra:
nano src/Petramas/MainBundle/Resources/views/layout.html.twig {% for type, flashMessage in app.session.flashbag.all() %} <div class="alert alert-{{ type }} fade in"> <button class="close" data-dismiss="alert" type="button">×</button> {% if flashMessage.title is defined %} <strong>{{ flashMessage.title }}</strong> {{ flashMessage.message }} {% else %} {{ type }} {% endif %} </div> {% endfor %}
Estilos en botones submit de CRUD
Si han seguido todos los pasos, entonces se darán cuenta que los botones para crear editar y eliminar se encuentran sin estilos. Ésto es debido a que el botón se crea en el controlador con todo el formulario (métodos: createCreateForm, createEditForm, createDeleteForm). Ésto es nuevo desde Symfony 2.3.
nano src/Petramas/MainBundle/Controller/ClienteController.php
Confirmación en Bootstrap 3
Para eliminar un registro sólo hace falta hacer click sobre el botón eliminar, pero, mejor si le preguntamos al usuario si esta seguro de eliminar ese registro, para ello vamos a hacer una modal con un botón para confirmar la eliminación del registro.
Para ello agregamos en nuestro archivo scripts.js:
Para ello agregamos en nuestro archivo scripts.js:
nano src/Petramas/MainBundle/Resources/js/scripts.js
Maquetación con Bootstrap 3 - show.html.twig - Parte V
Ésta es la última plantilla por defecto creada cuando generamos el CRUD automáticamente:
Maquetación con Bootstrap 3 - edit.html.twig - Parte IV
Esta plantilla es exáctamente igual que new.html.twig, sólo que en lugar de "form." es "edit_form." y en lugar de "(form" es "(edit_form"
Maquetación con Bootstrap 3 - new.html.twig - Parte III
Nuestra plantilla para editar registros se ve así:
{% extends '::base.html.twig' %} {% block body -%} <h1>Cliente creation</h1> {{ form(form) }} <ul class="record_actions"> <li> <a href="{{ path('cliente') }}"> Back to the list </a> </li> </ul> {% endblock %}
Maquetación con Bootstrap 3 - index.html.twig - Parte II
Para que la ruta a la que se hace click este siempre debajo del menú superior, se debe modificar la plantilla destino del siguiente modo:
nano src/Petramas/MainBundle/Resources/views/cliente/index.html.twig
viernes, 11 de octubre de 2013
Maquetación con Bootstrap 3 - layout.html.twig - Parte I
Editamos el layout
nano src/Petramas/MainBundle/Resources/views/layout.html.twig
Implementar Twitter Bootstrap 3 Estable en Symfony
Editar el archivo base.html.twig
este archivo se ve así:
lo que necesitamos es que se vea así:
nano app/Resources/views/base.html.twig
este archivo se ve así:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>{% block title %}Welcome!{% endblock %}</title> {% block stylesheets %}{% endblock %} <link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" /> </head> <body> {% block body %}{% endblock %} {% block javascripts %}{% endblock %} </body> </html>
lo que necesitamos es que se vea así:
Etiquetas:
assetic,
assets,
bootstrap 3,
bootstrap symfony2,
bootstrap tutorial,
bootstrap3,
config.yml,
html5,
symfony config,
symfony2 bootstrap,
symfony2 bootstrap3,
twig,
twitter bootstrap,
twitter bootstrap 3
Twitter Bootstrap 3 Estable - Instalación
1.- Clonar el nuevo repositorio de github
git clone https://github.com/twbs/bootstrap.git cd bootstrap
Etiquetas:
bootstrap 3,
bootstrap symfony2,
bootstrap tutorial,
bootstrap3,
etc fstab,
fstab,
git,
github,
grunt,
node npm,
nodejs,
npm,
ruby,
symfony2 bootstrap,
symfony2 bootstrap3,
twitter bootstrap,
twitter bootstrap 3
jueves, 10 de octubre de 2013
Comandos de consola personalizados
Hay 3 acciones muy empleadas a la hora de desarrollar en Symfony.
1.- Actualizar la base de datos
2.- Actualizar el código en Desarrollo (local)
3.- Actualizar el código en Producción
Para que estas tareas sean mucho más sencillas Symfony viene con comandos de consola muy prácticos, que ejecutan procesos y nos facilitan la tarea. Pero siempre se tienen que ejecuta en forma secuencial, demandando memorizar el flujo y ejecutarlo cada vez que lo necesitemos.
Para esto vamos a crear 3 comandos de consola personalizados que ejecuten en forma secuencial las tareas a realizar.
1.- Actualizar la base de datos
2.- Actualizar el código en Desarrollo (local)
3.- Actualizar el código en Producción
Para que estas tareas sean mucho más sencillas Symfony viene con comandos de consola muy prácticos, que ejecutan procesos y nos facilitan la tarea. Pero siempre se tienen que ejecuta en forma secuencial, demandando memorizar el flujo y ejecutarlo cada vez que lo necesitemos.
Para esto vamos a crear 3 comandos de consola personalizados que ejecuten en forma secuencial las tareas a realizar.
DoctrineFixturesBundle
En el archivo composer.json:
agregar debajo de "require":
nano composer.json
agregar debajo de "require":
"doctrine/doctrine-fixtures-bundle": "dev-master"
Generar CRUD de las entidades
joebuntu@casa-desktop:~/NetBeansProjects/petramas$ php app/console doctrine:generate:crud<ENTER> Welcome to the Doctrine2 crud generator This command helps you generate CRUD controllers and templates.
Relación OneToMany (Uno a muchos) en Doctrine2 usando anotaciones
Digamos que tenemos un cliente que hará muchos pedidos, entonces en nuestra entidad Cliente:
// src/Petramas/MainBundle/Entity/Cliente.php // ... use Doctrine\Common\Collections\ArrayCollection; class Cliente { // ... /** * @ORM\OneToMany(targetEntity="Pedido", mappedBy="cliente") */ protected $pedidos; public function __construct() { $this->pedidos = new ArrayCollection(); } }
Suscribirse a:
Entradas (Atom)