SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
Acerca de mí
Asier Marqués
One man army in Simettric.com
@asiermarques
github.com/Simettric
linkedin.com/in/asier
"Cuando miras al abismo,
el abismo también mira
dentro de tí"
WtfPress
WtfPress hell
— HTTP vs WP_Query
— Hooks oriented development
— Dependencias (plugins) delegadas en el
usuario
— Ausencia de aplicación de PSRs
— No se utiliza Composer
Wtf_Query
/category/animales => index.php?category=animales
WP_Query( array( “category” => “animales”) );
theme/category.php
Template hierarchy
WP_Query ruta personalizada
add_action('init', function() {
add_rewrite_rule( '^tasks/([^/]*)/?',
'index.php?post_type=task'
. '&category=$matches[1]'
. '&controller=mi_accion',
'top' );
add_rewrite_tag('%controller%', '(([^/]*))');
});
Al entrar en esa ruta...
$wp_query->query_vars["post_type"]
$wp_query->query_vars["category"]
$wp_query->query_vars["controller"]
...podemos llamar a nuestro "controlador"
add_action('parse_query', function(WP_Query $wp_query)
{
if( $wp_query->query_vars["controller"] == "mi_accion" )
{
// ¿mi controlador?
}
});
Hooks driven
development
WordPress heaven
— Mercado
— Tendencia a utilizarse como prototipo
para validar mercado
— Su uso masivo
Cómo mejorarlo
— Composer
— Injección de dependencias
— Mejor gestión de rutas
— Eliminar lógica de negocio en templates
— MVC
— Sin romper compatibilidad
Demo
Aplicando MVC e
Inyección de dependencias
Inyección de dependencias
$container = new ContainerBuilder();
$loader = new YamlFileLoader($container,
new FileLocator([__DIR__ . "/Config"]));
$loader->load('services.yml');
Nuestro controller
class MiControlador {
/**
* Route("/custom-path/{method}", name="mi_ruta");
*/
function miAccion(Request $request)
{
return 'template.php';
}
}
Anotación de ruta
/**
* @Annotation
* @Target({"PROPERTY"})
*/
class Route{
/** @var string */
public $path;
/** @var string */
public $name;
function __construct( $data=[] ){
if (isset($data['value'])) {
$data['path'] = $data['value'];
unset($data['value']);
}
}
}
Recopilando las rutas
$routes = [];
AnnotationRegistry::registerFile( __DIR__ . "/Annotations/Route.php" );
$reflClass = new ReflectionClass("MiControlador.php");
foreach($reflClass->getMethods() as $method) {
$classAnnotations = $reader->getMethodAnnotations($method);
foreach ($classAnnotations as $route) {
$routes[$route->name] = $route;
}
}
Ejecutar controlador
add_action('parse_query', function(WP_Query $wp_query) use ($container)
{
if($route_name = $wp_query->query_vars[“route_name”])
{
if(isset( $routes[$route_name] ))
{
$route = $routes[$route_name];
$controller = $route->createControllerInstance( $container );
$template = call_user_function( [ $controller, $route->getAction() ] );
$container->get("view")->setTemplate($template);
}
}
});
Vistas
add_filter( 'template_include', function ( $template ) use ($container) {
return $container->get("view")->getTemplate() ? : $template;
}
¿Twig?
Una de las formas de hacerlo (ejemplo simplificado)
add_filter( 'template_include', function ( $template ) use ($container) {
if ( $template = $container->get("wp_query")->query_vars["twig.template"] ) {
$twig = $container->get("twig");
$twig->render( $template );
// gestionar el response y terminar ejecución
}
return $template;
}
sense.simettic.com
github.com/Simettric/Sense
Un proyecto en desarrollo activo, se acepta
feedback asier@simettric.com
Composer
Composer
— WPackagist.org
— Composer installers
"repositories": [
{
"type": "composer",
"url": "https://wpackagist.org"
}
],
"require": {
"php": ">=5.4",
"composer/installers": "1.*",
"johnpbloch/wordpress": "4.*",
"wpackagist-plugin/akismet": "dev-trunk",
"wpackagist-theme/hueman": "*"
},
"extra": {
"wordpress-install-dir": "public/_wordpress/",
"installer-paths": {
"public/wp-content/plugins/{$name}/": ["type:wordpress-plugin"],
"public/wp-content/themes/{$name}/": ["type:wordpress-theme"]
}
}
Estructura de directorios con Composer
Gestionados por composer
— public/_wordpress/
— public/wp-content/
— vendor/
Punto de entrada y configuración
— public/index.php
— public/wp-config.php
public/index.php
define('WP_USE_THEMES', true);
require( __DIR__ . '/_wordpress/wp-blog-header.php' );
public/wp-config.php
require __DIR__ . '/../vendor/autoload.php';
define( 'SITE_HOST', 'http://example.com' );
define( 'WP_SITEURL', SITE_HOST . '/_wordpress' );
define( 'WP_HOME', SITE_HOST . '/' );
define( 'WP_CONTENT_DIR', __DIR__ . '/wp-content' );
define( 'WP_CONTENT_URL', SITE_HOST . '/wp-content' );
if ( !defined('ABSPATH') )
define('ABSPATH', __DIR__ . '/_wordpress');
Demo
Una instalación base
github.com/Simettric/wordpress-composer-
installation
Entornos mixtos
WordPress + Symfony
EkinoWordpressBundle
Seguridad
Usando el login de WordPress para autenticarme en Symfony
ekino_wordpress:
security:
firewall_name: "secured_area"
login_url: "/wp-login.php"
security:
providers:
main:
entity: { class: EkinoWordpressBundleEntityUser, property: login }
firewalls:
secured_area:
pattern: ^/admin
access_denied_handler: ekino.wordpress.security.entry_point
entry_point: ekino.wordpress.security.entry_point
anonymous: ~
access_control:
- { path: ^/admin, roles: ROLE_WP_ADMINISTRATOR }
Repositorios
$postManager = $this->get('ekino.wordpress.manager.post');
$userManager = $this->get('ekino.wordpress.manager.user');
$user = $userManager->find(2);
$post = $postManager->find(1);
$post->setAuthor($user);
$postManager->save($post);
Conclusiones
— Se puede crear buen código en WordPress
sin estar acoplado
— Se puede iniciar un proyecto en
WordPress y migrar a Symfony después
— Se pueden integrar ambas plataformas
Code is poetry a symphony
Gracias
¿Preguntas?
Asier Marqués
One man army in Simettric.com
@asiermarques
github.com/Simettric
linkedin.com/in/asier

Contenu connexe

Tendances

Java servlets
Java servletsJava servlets
Java servlets
lopjuan
 

Tendances (20)

Express node js
Express node jsExpress node js
Express node js
 
Angular data binding
Angular data binding Angular data binding
Angular data binding
 
jQuery for beginners
jQuery for beginnersjQuery for beginners
jQuery for beginners
 
Développer sous Sylius en 40 minutes chrono
Développer sous Sylius en 40 minutes chronoDévelopper sous Sylius en 40 minutes chrono
Développer sous Sylius en 40 minutes chrono
 
Express JS
Express JSExpress JS
Express JS
 
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
 
Quick flask an intro to flask
Quick flask   an intro to flaskQuick flask   an intro to flask
Quick flask an intro to flask
 
Dom
DomDom
Dom
 
Java servlets
Java servletsJava servlets
Java servlets
 
Routing & Navigating Pages in Angular 2
Routing & Navigating Pages in Angular 2Routing & Navigating Pages in Angular 2
Routing & Navigating Pages in Angular 2
 
react redux.pdf
react redux.pdfreact redux.pdf
react redux.pdf
 
Angular - Chapter 5 - Directives
 Angular - Chapter 5 - Directives Angular - Chapter 5 - Directives
Angular - Chapter 5 - Directives
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기
 
Angular routing
Angular routingAngular routing
Angular routing
 
Javascript validating form
Javascript validating formJavascript validating form
Javascript validating form
 
Django forms
Django formsDjango forms
Django forms
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
Workshop 21: React Router
Workshop 21: React RouterWorkshop 21: React Router
Workshop 21: React Router
 
Oracle APEX Nitro
Oracle APEX NitroOracle APEX Nitro
Oracle APEX Nitro
 
Appium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон СеменченкоAppium + selenide comaqa.by. Антон Семенченко
Appium + selenide comaqa.by. Антон Семенченко
 

En vedette

Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worlds
Ignacio Martín
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
Maurizio Pelizzone
 

En vedette (20)

Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and moreSymfony Guard Authentication: Fun with API Token, Social Login, JWT and more
Symfony Guard Authentication: Fun with API Token, Social Login, JWT and more
 
Refactorizando Pccomponentes.com con Symfony
Refactorizando Pccomponentes.com con SymfonyRefactorizando Pccomponentes.com con Symfony
Refactorizando Pccomponentes.com con Symfony
 
Guard Authentication: Powerful, Beautiful Security
Guard Authentication: Powerful, Beautiful SecurityGuard Authentication: Powerful, Beautiful Security
Guard Authentication: Powerful, Beautiful Security
 
Doctrine2 sf2Vigo
Doctrine2 sf2VigoDoctrine2 sf2Vigo
Doctrine2 sf2Vigo
 
WordCamp Cantabria - Código mantenible con WordPress
WordCamp Cantabria  - Código mantenible con WordPressWordCamp Cantabria  - Código mantenible con WordPress
WordCamp Cantabria - Código mantenible con WordPress
 
How Symfony Changed My Life
How Symfony Changed My LifeHow Symfony Changed My Life
How Symfony Changed My Life
 
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)Integrando React.js en aplicaciones Symfony (deSymfony 2016)
Integrando React.js en aplicaciones Symfony (deSymfony 2016)
 
Keeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and WebpackKeeping the frontend under control with Symfony and Webpack
Keeping the frontend under control with Symfony and Webpack
 
Symfony: Your Next Microframework (SymfonyCon 2015)
Symfony: Your Next Microframework (SymfonyCon 2015)Symfony: Your Next Microframework (SymfonyCon 2015)
Symfony: Your Next Microframework (SymfonyCon 2015)
 
Symfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worldsSymfony & Javascript. Combining the best of two worlds
Symfony & Javascript. Combining the best of two worlds
 
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
 
React + Redux Introduction
React + Redux IntroductionReact + Redux Introduction
React + Redux Introduction
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesome
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
 
Introduction to Redux
Introduction to ReduxIntroduction to Redux
Introduction to Redux
 
Sobreescritura y extensión de validaciones, formularios y entidades
Sobreescritura y extensión de validaciones, formularios y entidadesSobreescritura y extensión de validaciones, formularios y entidades
Sobreescritura y extensión de validaciones, formularios y entidades
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
 
Cucumbers Have Layers - RubyConf 2015
Cucumbers Have Layers - RubyConf 2015Cucumbers Have Layers - RubyConf 2015
Cucumbers Have Layers - RubyConf 2015
 
When e-commerce meets Symfony
When e-commerce meets SymfonyWhen e-commerce meets Symfony
When e-commerce meets Symfony
 
PHP 7 performances from PHP 5
PHP 7 performances from PHP 5PHP 7 performances from PHP 5
PHP 7 performances from PHP 5
 

Similaire à Desarrollo código mantenible en WordPress utilizando Symfony

Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
Javier P.
 

Similaire à Desarrollo código mantenible en WordPress utilizando Symfony (20)

Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Código mantenible, en Wordpress.
Código mantenible, en Wordpress.
 
Customizer: configurando un sitio en tiempo real
Customizer: configurando un sitio en tiempo realCustomizer: configurando un sitio en tiempo real
Customizer: configurando un sitio en tiempo real
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery(Muy breve) Introduccion a jQuery
(Muy breve) Introduccion a jQuery
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
Desarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQueryDesarrollo de aplicaciones web usando Catalyst y jQuery
Desarrollo de aplicaciones web usando Catalyst y jQuery
 
Presentacion YII
Presentacion YIIPresentacion YII
Presentacion YII
 
Desarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQueryDesarrollando aplicaciones web usando Catalyst y jQuery
Desarrollando aplicaciones web usando Catalyst y jQuery
 
Introducción a Flask
Introducción a FlaskIntroducción a Flask
Introducción a Flask
 
Sistemas en WordPress: WPDB, Ajax, custom fields y otras magias
Sistemas en WordPress: WPDB, Ajax, custom fields y otras magiasSistemas en WordPress: WPDB, Ajax, custom fields y otras magias
Sistemas en WordPress: WPDB, Ajax, custom fields y otras magias
 
Javascript y AJAX en Wordpress
Javascript y AJAX en WordpressJavascript y AJAX en Wordpress
Javascript y AJAX en Wordpress
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHP
 
Assetic PHPmvd
Assetic PHPmvdAssetic PHPmvd
Assetic PHPmvd
 
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
 
APIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptxAPIREST LARAVEL Y PHP.pptx
APIREST LARAVEL Y PHP.pptx
 
Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbaoDesarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
Desarrollo de Themes de WordPress desde cero. @DarioBF en @WPBilbao
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
WordPress y JavaScript
WordPress y JavaScriptWordPress y JavaScript
WordPress y JavaScript
 
Introducción a los hooks
Introducción a los hooksIntroducción a los hooks
Introducción a los hooks
 

Plus de Asier Marqués

Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Asier Marqués
 
Servicios REST - PucelaTechDay
Servicios REST - PucelaTechDayServicios REST - PucelaTechDay
Servicios REST - PucelaTechDay
Asier Marqués
 
Desarrollo de aplicaciones Windows8 para desarrolladores de internet
Desarrollo de aplicaciones Windows8 para desarrolladores de internetDesarrollo de aplicaciones Windows8 para desarrolladores de internet
Desarrollo de aplicaciones Windows8 para desarrolladores de internet
Asier Marqués
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012
Asier Marqués
 
4VisionsManager en WebDevBilbao
4VisionsManager en WebDevBilbao4VisionsManager en WebDevBilbao
4VisionsManager en WebDevBilbao
Asier Marqués
 

Plus de Asier Marqués (20)

Creando Productos SaaS
Creando Productos SaaSCreando Productos SaaS
Creando Productos SaaS
 
Introducción a Bolt
Introducción a BoltIntroducción a Bolt
Introducción a Bolt
 
PHP en el 2015
PHP en el 2015PHP en el 2015
PHP en el 2015
 
Ejecución de servicios digitales y negocios en Internet
Ejecución de servicios digitales y negocios en InternetEjecución de servicios digitales y negocios en Internet
Ejecución de servicios digitales y negocios en Internet
 
Desarrollo de Mobile Web Apps
Desarrollo de Mobile Web AppsDesarrollo de Mobile Web Apps
Desarrollo de Mobile Web Apps
 
Presentación de la plataforma abierta Ubiqarama.org
Presentación de la plataforma abierta Ubiqarama.orgPresentación de la plataforma abierta Ubiqarama.org
Presentación de la plataforma abierta Ubiqarama.org
 
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
Calidad, IC y Entrega contínua en Symfony2 con Azure - Parte 1
 
Albero tech Day - De web a móvil con xamarin
Albero tech Day - De web a móvil con xamarinAlbero tech Day - De web a móvil con xamarin
Albero tech Day - De web a móvil con xamarin
 
Bilbostack 2014: De web a móvil con Xamarin
Bilbostack 2014: De web a móvil con XamarinBilbostack 2014: De web a móvil con Xamarin
Bilbostack 2014: De web a móvil con Xamarin
 
APIs REST #devfestBilbao
APIs REST #devfestBilbaoAPIs REST #devfestBilbao
APIs REST #devfestBilbao
 
Silex para aplicaciones web MVC
Silex para aplicaciones web MVCSilex para aplicaciones web MVC
Silex para aplicaciones web MVC
 
Servicios REST - PucelaTechDay
Servicios REST - PucelaTechDayServicios REST - PucelaTechDay
Servicios REST - PucelaTechDay
 
Desarrollo de aplicaciones Windows8 para desarrolladores de internet
Desarrollo de aplicaciones Windows8 para desarrolladores de internetDesarrollo de aplicaciones Windows8 para desarrolladores de internet
Desarrollo de aplicaciones Windows8 para desarrolladores de internet
 
REST - deSymfony2012
REST - deSymfony2012REST - deSymfony2012
REST - deSymfony2012
 
BilboStack - Php en el 2012
BilboStack - Php en el 2012BilboStack - Php en el 2012
BilboStack - Php en el 2012
 
4VisionsManager en WebDevBilbao
4VisionsManager en WebDevBilbao4VisionsManager en WebDevBilbao
4VisionsManager en WebDevBilbao
 
Proyectos fallidos: Rooms.fm en #webdevbilbao
Proyectos fallidos: Rooms.fm en #webdevbilbaoProyectos fallidos: Rooms.fm en #webdevbilbao
Proyectos fallidos: Rooms.fm en #webdevbilbao
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Symfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesSymfony, cloud computing y web escalables
Symfony, cloud computing y web escalables
 
Sistemas Microsoft Windows
Sistemas Microsoft WindowsSistemas Microsoft Windows
Sistemas Microsoft Windows
 

Dernier

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Dernier (15)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 

Desarrollo código mantenible en WordPress utilizando Symfony