SlideShare a Scribd company logo
Frameworks de desarrollo

Symfony
Clase 4

                       Javier Eguíluz
                       javier.eguiluz@gmail.com
Esta obra dispone de una licencia de tipo Creative
Commons Reconocimiento‐No comercial‐ Compartir 
             bajo la misma licencia 3.0 




 Se prohíbe explícitamente el uso de este material en 
        actividades de formación comerciales

http://creativecommons.org/licenses/by‐nc‐sa/3.0/es/
This work is licensed under a Creative Commons
  Attribution‐Noncommercial‐Share Alike 3.0 




    The use of these slides in commercial courses or
            trainings is explicitly prohibited

 http://creativecommons.org/licenses/by‐nc‐sa/3.0/es/
Capítulo 16

Servicios web
long tail
sitio1.com




sitio2.com




sitio3.com




sitio4.com
Los afiliados
data/fixtures/030_affiliates.yml
JobeetAffiliate:
  sensio_labs:
    url:       http://www.sensio‐labs.com/
    email:     fabien.potencier@example.com
    is_active: true
    token:     sensio_labs
   jobeet_category_affiliates: [programming]

 symfony:
   url:       http://www.symfony‐project.org/
   email:     fabien.potencier@example.org
   is_active: false
   token:     symfony
   jobeet_category_affiliates: [design, programming]
lib/model/JobeetAffiliate.php

class JobeetAffiliate extends BaseJobeetAffiliate
{
  public function save(PropelPDO $con = null)
  {
    if (!$this‐>getToken())
    {
      $this‐>setToken(
        sha1($this‐>getEmail().rand(11111, 99999))
      );
    }

        return parent::save($con);
    }

    // ...
}
apps/frontend/config/routing.yml
api_jobs:
  url:   /api/:token/jobs.:sf_format
  class: sfPropelRoute
  param: { module: api, action: list }
  options: { model: JobeetJob, type: list, method: getForToken }
  requirements:
    sf_format: (?:xml|json|yaml)


                                    lib/model/JobeetJobPeer.php
static public function getForToken(array $parameters) {
    $affiliate = JobeetAffiliatePeer::getByToken($parameters['token']);
    if (!$affiliate || !$affiliate‐>getIsActive()) {
      throw new sfError404Exception('...');
    }
    return $affiliate‐>getActiveJobs();
}
lib/model/JobeetAffiliate.php
class JobeetAffiliate extends BaseJobeetAffiliate
{
  public function getActiveJobs()
  {
    $cas = $this‐>getJobeetCategoryAffiliates();
    $categories = array();
    foreach ($cas as $ca) {
      $categories[] = $ca‐>getCategoryId(); 
    }
    $criteria = new Criteria();
    $criteria‐>add(
      JobeetJobPeer::CATEGORY_ID,
      $categories,
      Criteria::IN
    ); 
    JobeetJobPeer::addActiveJobsCriteria($criteria);
    return JobeetJobPeer::doSelect($criteria);
  }
}
$ ./symfony generate:module frontend api


         apps/frontend/modules/api/actions/actions.class.php

public function executeList(sfWebRequest $request)
{
  $this‐>jobs = array();
  foreach ($this‐>getRoute()‐>getObjects() as $job)
  {
    $url = $this‐>generateUrl('job_show_user', $job, true);
    $this‐>jobs[$url] = $job‐>asArray($request‐>getHost());
  }
}
XML




petición                   JSON


           executeList()
                           YAML
apps/frontend/modules/api/templates/listSuccess.xml.php

<?xml version=quot;1.0quot; encoding=quot;utf‐8quot;?>
<jobs>
<?php foreach ($jobs as $url => $job): ?>
  <job url=quot;<?php echo $url ?>quot;>
<?php foreach ($job as $key => $value): ?>
  <<?php echo $key ?>>
    <?php echo $value ?>
  </<?php echo $key ?>>
<?php endforeach; ?>
  </job>
<?php endforeach; ?>
</jobs>
apps/frontend/modules/api/templates/listSuccess.json.php
[
<?php
$nb = count($jobs); $i = 0;
foreach ($jobs as $url => $job): ++$i ?>
{
  quot;urlquot;: quot;<?php echo $url ?>quot;,
<?php
  $nb1 = count($job); $j = 0;
  foreach ($job as $key => $value): ++$j ?>
  quot;<?php echo $key ?>quot;: <?php echo json_encode($value).
                                    ($nb1 == $j ? '' : ',') ?>
<?php endforeach; ?>
}<?php echo $nb == $i ? '' : ',' ?>

<?php endforeach; ?>
]
Cómo crear un nuevo formato

 1. Crear la plantilla de la acción 
   (xxxSuccess.formato.php)
 2. Deshabilitar el layout y establecer el Content‐
   Type de la respuesta
 3. Crear las páginas de error y de excepción
   (config/error/[error|exception].formato.yml)
apps/frontend/modules/api/templates/listSuccess.yaml.php

<?php foreach ($jobs as $url => $job): ?>
‐
  url: <?php echo $url ?>

<?php foreach ($job as $key => $value): ?>
  <?php echo $key ?>: <?php echo sfYaml::dump($value) ?>

<?php endforeach; ?>
<?php endforeach; ?>




$this‐>setLayout(false);
$this‐>getResponse()‐>setContentType('text/yaml');
config/error/exception.yaml.php
<?php echo sfYaml::dump(array(
  'error' => array(
    'code' => $code,
    'message' => $message,
    'debug' => array(
      'name' => $name,
      'message' => $message,
      'traces' => $traces,
    ),
)), 4) ?>

                         config/error/error.yaml.php
<?php echo sfYaml::dump(array(
  'error' => array(
    'code' => $code,
    'message' => $message,
))) ?> 
apps/frontend/templates/layout.yaml.php




<?php echo $sf_content ?> 
El formulario para 
darse de alta como 
      afiliado
apps/frontend/config/routing.yml
 affiliate:
   class: sfPropelRouteCollection
   options:
     model:          JobeetAffiliate
     actions:        [new, create]
     object_actions: { wait: get }




$ ./symfony propel:generate‐module frontend affiliate
JobeetAffiliate ‐‐non‐verbose‐templates
apps/frontend/modules/affiliate/templates/newSuccess.php
<?php use_stylesheet('job.css') ?>
<h1>Conviértete en afiliado</h1>
<?php include_partial('form', array('form' => $form)) ?> 



        apps/frontend/modules/affiliate/templates/_form.php
<?php include_stylesheets_for_form($form) ?>
<?php include_javascripts_for_form($form) ?>
<?php echo form_tag_for($form, 'affiliate') ?>
...
<input type=quot;submitquot; value=quot;Submitquot; />
...
<?php echo $form ?>
</form>
apps/frontend/modules/affiliate/templates/waitSuccess.php

<h1>Your affiliate account has been created</h1>
<div style=quot;padding: 20pxquot;>
  ¡Gracias! Pronto recibirás un email... 
</div>



                       apps/frontend/templates/layout.php
...
<li class=quot;lastquot;>
  <a href=quot;<?php echo url_for('@affiliate_new') ?>quot;>
    Become an affiliate
  </a>
</li>
...
Administrando los 
   afiliados
$ ./symfony propel:generate‐admin backend
JobeetAffiliate ‐‐module=affiliate
apps/backend/modules/affiliate/config/generator.yml
  config:
    fields:
      is_active: { label: Active? }
    list:
      title:   Affiliate Management
      display: [is_active, url, email, token]
      sort:    [is_active]
      object_actions:
        activate:   ~
        deactivate: ~
      batch_actions:
        activate:   ~
        deactivate: ~
      actions: {}
    filter:
      display: [url, email, is_active]


apps/backend/modules/affiliate/lib/affiliateGeneratorConfiguration.class.php
  public function getFilterDefaults() {
    return array('is_active' => '0');
  }
Enviando emails
Zend Framework


                   Zend_Mail
quot;Zend_Mail provides generalized functionality to compose
and send both text and MIME‐compliant multipart e‐mail 
messages. Mail can be sent with Zend_Mail via the default
    Zend_Mail_Transport_Sendmail transport or via
             Zend_Mail_Transport_Smtpquot;
1. Descargar Zend Framework

     Descomprimirlo en lib/vendor/Zend
2.

     Eliminar todo salvo:
3.

           Loader/              Exception.php
       •                    •
           Loader.php           Mime/
       •                    •
           Mail/                Mime.php
       •                    •
           Mail.php             Search/
       •                    •
config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration {
  static protected $zendLoaded = false;

    static public function registerZend() {
      if (self::$zendLoaded) {
        return;
      }

        set_include_path(sfConfig::get('sf_lib_dir').
                         '/vendor'.
                         PATH_SEPARATOR.
                         get_include_path()
        );

        require_once sfConfig::get('sf_lib_dir').
                     '/vendor/Zend/Loader.php';

        Zend_Loader::registerAutoload();
        self::$zendLoaded = true;
    }
}
apps/backend/modules/affiliate/actions/actions.class.php


ProjectConfiguration::registerZend();
$mail = new Zend_Mail();

$mail‐>setBodyText(quot;Hemos activado tu cuenta y tu 
token secreto es {$affiliate‐>getToken()}quot;)
  ‐>setFrom('jobeet@example.com', 'Jobeet Bot')
  ‐>addTo($affiliate‐>getEmail())
  ‐>setSubject('Jobeet affiliate token')
  ‐>send();
Capítulo 17

El buscador
La tecnología
quot;No reinventes la ruedaquot;

      NIH (Not Invented Here)
 “persistent sociological, corporate or institutional
culture that avoids using or buying already existing
  products, research or knowledge because of its
                  different origins”
Zend Framework


           Zend_Search_Lucene
quot;...un buscador genérico de texto escrito completamente 
   con PHP 5. Como guarda sus índices en archivos y no 
requiere de un servidor de bases de datos, permite incluir 
 un buscador en cualquier sitio web construido con PHP.quot;
1. Descargar Zend Framework

     Descomprimirlo en lib/vendor/Zend
2.

     Eliminar todo salvo:
3.

           Loader/              Exception.php
       •                    •
           Loader.php           Mime/
       •                    •
           Mail/                Mime.php
       •                    •
           Mail.php             Search/
       •                    •
config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration {
  static protected $zendLoaded = false;

    static public function registerZend() {
      if (self::$zendLoaded) {
        return;
      }

        set_include_path(sfConfig::get('sf_lib_dir').
                         '/vendor'.
                         PATH_SEPARATOR.
                         get_include_path()
        );

        require_once sfConfig::get('sf_lib_dir').
                     '/vendor/Zend/Loader.php';

        Zend_Loader::registerAutoload();
        self::$zendLoaded = true;
    }
}
Índices
lib/model/JobeetJobPeer.php

static public function getLuceneIndex() {
  ProjectConfiguration::registerZend();

    if (file_exists($index = self::getLuceneIndexFile())) {
      return Zend_Search_Lucene::open($index);
    } else {
      return Zend_Search_Lucene::create($index);
    }
}

static public function getLuceneIndexFile() {
  return sfConfig::get('sf_data_dir').
         '/job.'.
         sfConfig::get('sf_environment').
         '.index';
}
lib/model/JobeetJob.php

public function save(PropelPDO $con = null)
{
  // ...

    $ret = parent::save($con);

    $this‐>updateLuceneIndex();

    return $ret;
}
lib/model/JobeetJob.php
public function updateLuceneIndex() {
  $index = JobeetJobPeer::getLuceneIndex();

    $doc = new Zend_Search_Lucene_Document();

    $doc‐>addField(Zend_Search_Lucene_Field::UnIndexed(
       'pk',
       $this‐>getId())
    );

    $doc‐>addField(Zend_Search_Lucene_Field::UnStored(
       'position',
       $this‐>getPosition(), 'utf‐8')
    );
    // ...

    $index‐>addDocument($doc);
    $index‐>commit();
}
lib/model/JobeetJob.php
public function save(PropelPDO $con = null) {
  // ...
  if (is_null($con)) {
        $con = Propel::getConnection(JobeetJobPeer::DATABASE_NAME, Propel::CONNECTION_WRITE);
    }

    $con‐>beginTransaction();
    try {
      $ret = parent::save($con);
      $this‐>updateLuceneIndex();
      $con‐>commit();
      return $ret;
    }
    catch (Exception $e) {
      $con‐>rollBack();
      throw $e;
    }
}
lib/model/JobeetJob.php



public function delete(PropelPDO $con = null)
{
  $index = JobeetJobPeer::getLuceneIndex();
  if ($hit = $index‐>find('pk:'.$this‐>getId()))
  {
    $index‐>delete($hit‐>id);
  }

    return parent::delete($con);
}
Búsquedas
apps/frontend/config/routing.yml
job_search:
  url:   /search
  param: { module: job, action: search }

               apps/frontend/modules/job/actions/actions.class.php
class jobActions extends sfActions
{
  public function executeSearch(sfWebRequest $request) {
    if (!$query = $request‐>getParameter('query')) {
      return $this‐>forward('job', 'index');
    }
    $this‐>jobs = JobeetJobPeer::getForLuceneQuery($query); 
  }
  // ...
}
lib/model/JobeetJobPeer.php

static public function getForLuceneQuery($query) {
  $hits = self::getLuceneIndex()‐>find($query);

    $pks = array();
    foreach ($hits as $hit) {
      $pks[] = $hit‐>pk;
    }

    $criteria = new Criteria();
    $criteria‐>add(self::ID, $pks, Criteria::IN);
    $criteria‐>setLimit(20);

    return self::doSelect(self::addActiveJobsCriteria($criteria));
}
Capítulo 18

AJAX
web/js/jquery‐1.2.6.min.js
Incluyendo jQuery
apps/frontend/templates/layout.php

  ...
  <?php use_javascript('jquery‐1.2.6.min.js') ?>
  <?php include_javascripts() ?>
</head>

                    mejora el 
                    rendimiento

  ...
  <?php include_javascripts() ?>
</body>
Añadiendo los 
comportamientos
$('#search_keywords').keyup(function(key)
{
  if (this.value.length >= 3 || this.value == '')
  {
    $('#jobs').load(
       $(this).parents('form').attr('action'),
       { query: this.value + '*' }
    );
  }
});

$('.search input[type=quot;submitquot;]').hide();
web/js/search.js
$(document).ready(function()
{
  $('.search input[type=quot;submitquot;]').hide();
  $('#search_keywords').keyup(function(key)
  {
    if (this.value.length >= 3 || this.value == '')
    {
      $('#loader').show();
      $('#jobs').load(
        $(this).parents('form').attr('action'),
        { query: this.value + '*' },
        function() { $('#loader').hide(); }
      );
    }
  });
});
                      apps/frontend/templates/layout.php
<?php use_javascript('search.js') ?>
AJAX en las acciones
AJAX                JavaScript


                  layout +
layout +
                  searchSuccess.php
renderPartial()
apps/frontend/modules/job/actions/actions.class.php

public function executeSearch(sfWebRequest $request)
{
  if (!$query = $request‐>getParameter('query'))
  {
    return $this‐>forward('job', 'index');
  }

    $this‐>jobs = JobeetJobPeer::getForLuceneQuery($query);

    if ($request‐>isXmlHttpRequest())
    {
                                        AJAX
      return $this‐>renderPartial(
        'job/list',
        array('jobs' => $this‐>jobs)
      );
    }
}
apps/frontend/modules/job/actions/actions.class.php
public function executeSearch(sfWebRequest $request)
{
  if (!$query = $request‐>getParameter('query'))
  {
    return $this‐>forward('job', 'index');
  }

    $this‐>jobs = JobeetJobPeer::getForLuceneQuery($query);

    if ($request‐>isXmlHttpRequest())
    {
      if ('*' == $query || !$this‐>jobs) {
        return $this‐>renderText('No results.');
      }
      else {
        return $this‐>renderPartial(
          'job/list',
          array('jobs' => $this‐>jobs)
        );
      }
    }
}
http://www.symfony‐project.org/api/1_2/sfAction




    renderText()
    renderPartial()
    renderComponent()
Capítulo 19

i18n y l10n
i18n y l10n
quot;La internacionalización es el proceso de diseñar aplicaciones de 
software que puedan ser adaptadas a distintos idiomas y 
regiones sin necesidad de realizar cambios en su ingeniería.quot;


quot;La localización es el proceso de adaptar el software para una 
región o idioma específicos mediante la inclusión de componentes 
específicos de esa región y mediante la traducción del texto.quot;
El usuario
idioma + país = cultura
    es_ES        fr_FR
    es_AR        fr_BE
    es_MX        fr_CA
    es_PE
idioma (ISO 3166‐1)

                  país (ISO 639‐1)

$this‐>getUser()‐>setCulture('fr_BE');

echo $this‐>getUser()‐>getCulture();



                        apps/frontend/config/settings.yml
all:
  .settings:
     default_culture: es_ES
$idiomas = $request‐>getLanguages();


$idiomas = $request‐>getPreferredCulture(
  array('en', 'fr')
); 
Incluyendo la cultura 
      en la URL
apps/frontend/config/settings.yml
category:
  url:     /:sf_culture/category/:slug.:sf_format
  class:   sfPropelRoute
  param:   { module: category,
             action: show,
             sf_format: html }
  options: { model: JobeetCategory, type: object }
  requirements:
    sf_format: (?:html|atom)

job_search:
  url:   /:sf_culture/search
  param: { module: job, action: search }
Cambiando de 
   idioma
$ ./symfony plugin:install sfFormExtraPlugin


$ ./symfony cc
apps/frontend/templates/layout.php

<div id=quot;footerquot;>
  <div class=quot;contentquot;>
    <?php include_component('idioma', 'idioma') ?>
  </div>
</div> 




$ ./symfony generate:module frontend idioma
apps/frontend/modules/idioma/actions/components.class.php


class languageComponents extends sfComponents
{
  public function executeIdioma(sfWebRequest $request)
  {
    $this‐>form = new sfFormLanguage(
       $this‐>getUser(),
       array('languages' => array('en', 'fr'))
    );
  }
}
apps/frontend/config/routing.yml
cambiar_idioma:
  url:   /cambiar_idioma
  param: { module: idioma, action: cambiarIdioma }

              apps/frontend/modules/idioma/actions/actions.class.php
class idiomaActions extends sfActions {
  public function executeCambiarIdioma(sfWebRequest $request) {
    $form = new sfFormLanguage(
      $this‐>getUser(),
      array('languages' => array('en', 'fr'))
    );

    $form‐>process($request);

     return $this‐>redirect('@localized_homepage');
    }
}
apps/frontend/config/routing.yml

localized_homepage:
  url:   /:sf_culture/
  param: { module: job, action: index }
  requirements:
    sf_culture: (?:fr|en|es|eu)
Internacionalización
ASCII
Where are you from?



Vous êtes d'où ?      ISO‐8859‐1


どこから来ましたか                 UTF‐8
apps/frontend/config/settings.yml

all:
  .settings:

    charset: utf‐8

    i18n:    on

    standard_helpers: [Partial, Cache, I18N]
apps/frontend/templates/layout.php
<ul>
  <li>
     <a href=quot;quot;><?php echo __('About Jobeet') ?></a> 
  </li>
  <li class=quot;feedquot;>
     <?php echo link_to(__('Full feed'), '@job?sf_format=atom') ?>
  </li>
  <li>
     <a href=quot;quot;><?php echo __('Jobeet API') ?></a> 
  </li>
  <li class=quot;lastquot;>
   <?php echo link_to(__('Become an affiliate'), '@affiliate_new') ?>
  </li>

                            _ _( )           • gettext
</ul>                                                    • SQLite
                                             • MySQL     • XLIFF
$ ./symfony i18n:extract frontend fr ‐‐auto‐save
                                apps/frontend/i18n/fr/messages.xml
<!DOCTYPE xliff PUBLIC quot;‐//XLIFF//DTD XLIFF//ENquot;
quot;http://www.oasis‐open.org/committees/xliff/documents/xliff.dtdquot;>
<xliff version=quot;1.0quot;>
  <file source‐language=quot;ENquot; target‐language=quot;frquot;
        datatype=quot;plaintextquot; original=quot;messagesquot;
        date=quot;2008‐12‐14T12:11:22Zquot; product‐name=quot;messagesquot;>
  <header/>
  <body>
     <trans‐unit id=quot;1quot;>
       <source>About Jobeet</source>
       <target/>
     </trans‐unit>
     <trans‐unit id=quot;2quot;>
       <source>Feed</source>
       <target/>
     </trans‐unit>
    ...
  </body>
  </file>
</xliff>
<div class=quot;more_jobsquot;>
  <?php echo __('and %count% more...', array(
         '%count%' => link_to($count, 'category', $category)
        ))
  ?>
</div>


<?php echo format_number_choice(
  '[0]No job in this category|
   [1]One job in this category|
   (1,+Inf]%count% jobs in this category',
  array(
     '%count%' => '<strong>'.$pager‐>getNbResults().'</strong>'
  ),
  $pager‐>getNbResults()
  )
?>


   $ ./symfony i18n:extract frontend fr ‐‐auto‐save
apps/frontend/i18n/fr/messages.xml

<trans‐unit id=quot;6quot;>
  <source>
    [0]No job in this category|
    [1]One job in this category|
    (1,+Inf]%count% jobs in this category
  </source>
  <target>
    [0]Aucune annonce dans cette catégorie|
    [1]Une annonce dans cette catégorie|
    (1,+Inf]%count% annonces dans cette catégorie
  </target>
</trans‐unit>
config/schema.yml

jobeet_category:
  _attributes: { isI18N: true, i18nTable: 
                 jobeet_category_i18n }
  id:          ~

jobeet_category_i18n:
  id:      { type: integer, required: true, primaryKey: 
             true, foreignTable: jobeet_category, 
             foreignReference: id }
  culture: { isCulture: true, type: varchar, size: 7, 
             required: true, primaryKey: true }
  name:    { type: varchar(255), required: true }
  slug:    { type: varchar(255), required: true }
data/fixtures/010_categories.yml


JobeetCategory:
  design:        { }
  programming:   { }

JobeetCategoryI18n:
  design_en:      { id: design, culture: en, name: Design }
  programming_en: { id: programming, culture: en, name: 
                    Programming }

 design_fr:      { id: design, culture: fr, name: Design }
 programming_fr: { id: programming, culture: fr, name: 
                   Programmation }
apps/frontend/config/routing.yml
category:
 url:     /:sf_culture/category/:slug.:sf_format
 class:   sfPropelRoute
 param:   { module: category, action: show, sf_format: html }
 options: { model: JobeetCategory, type: object, method: 
            doSelectForSlug }
 requirements:
   sf_format: (?:html|atom)



            $ ./symfony propel:data‐load

     /frontend_dev.php/fr/category/programmation
     /frontend_dev.php/en/category/programming
lib/form/JobeetCategoryForm.class.php

class JobeetCategoryForm extends BaseJobeetCategoryForm
{
  public function configure()
  {
    unset($this['jobeet_category_affiliate_list']);

        $this‐>embedI18n(array('en', 'fr'));
        $this‐>widgetSchema‐>setLabel('en', 'English'); 
        $this‐>widgetSchema‐>setLabel('fr', 'French');
    }
}
Localización
format_date()
format_datetime()
format_number()
format_currency()
format_country()
format_language()
sfWidgetFormI18nDate
sfWidgetFormI18nDateTime
sfWidgetFormI18nTime
sfWidgetFormI18nSelectCountry
sfWidgetFormI18nSelectCurrency
sfWidgetFormI18nSelectLanguage
sfValidatorI18nChoiceCountry
sfValidatorI18nChoiceLanguage

More Related Content

What's hot

Silex Cheat Sheet
Silex Cheat SheetSilex Cheat Sheet
Silex Cheat Sheet
Andréia Bohner
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
John Cleveley
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207patter
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hacking
Jeroen van Dijk
 
Symfony2 and AngularJS
Symfony2 and AngularJSSymfony2 and AngularJS
Symfony2 and AngularJS
Antonio Peric-Mazar
 
Apigility reloaded
Apigility reloadedApigility reloaded
Apigility reloaded
Ralf Eggert
 
Sylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationSylius and Api Platform The story of integration
Sylius and Api Platform The story of integration
Łukasz Chruściel
 
15.exemplu complet eloquent view add-edit-delete-search
15.exemplu complet eloquent view add-edit-delete-search15.exemplu complet eloquent view add-edit-delete-search
15.exemplu complet eloquent view add-edit-delete-search
Razvan Raducanu, PhD
 
Introduction to Zend framework
Introduction to Zend framework Introduction to Zend framework
Introduction to Zend framework
Matteo Magni
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hacking
Jeroen van Dijk
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
Jeroen van Dijk
 
PHP MVC
PHP MVCPHP MVC
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
Antonio Peric-Mazar
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
Michelangelo van Dam
 
Building Potent WordPress Websites
Building Potent WordPress WebsitesBuilding Potent WordPress Websites
Building Potent WordPress Websites
Kyle Cearley
 
Elixir/OTP for PHP developers
Elixir/OTP for PHP developersElixir/OTP for PHP developers
Elixir/OTP for PHP developers
Ignacio Martín
 
PHP: 4 Design Patterns to Make Better Code
PHP: 4 Design Patterns to Make Better CodePHP: 4 Design Patterns to Make Better Code
PHP: 4 Design Patterns to Make Better Code
SWIFTotter Solutions
 
And the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack SupportAnd the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack Support
Ben Scofield
 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
Haehnchen
 

What's hot (20)

Silex Cheat Sheet
Silex Cheat SheetSilex Cheat Sheet
Silex Cheat Sheet
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hacking
 
Symfony2 and AngularJS
Symfony2 and AngularJSSymfony2 and AngularJS
Symfony2 and AngularJS
 
Apigility reloaded
Apigility reloadedApigility reloaded
Apigility reloaded
 
Sylius and Api Platform The story of integration
Sylius and Api Platform The story of integrationSylius and Api Platform The story of integration
Sylius and Api Platform The story of integration
 
PHP 5.3 in practice
PHP 5.3 in practicePHP 5.3 in practice
PHP 5.3 in practice
 
15.exemplu complet eloquent view add-edit-delete-search
15.exemplu complet eloquent view add-edit-delete-search15.exemplu complet eloquent view add-edit-delete-search
15.exemplu complet eloquent view add-edit-delete-search
 
Introduction to Zend framework
Introduction to Zend framework Introduction to Zend framework
Introduction to Zend framework
 
WordPress REST API hacking
WordPress REST API hackingWordPress REST API hacking
WordPress REST API hacking
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
 
PHP MVC
PHP MVCPHP MVC
PHP MVC
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
Unit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBeneluxUnit testing with zend framework PHPBenelux
Unit testing with zend framework PHPBenelux
 
Building Potent WordPress Websites
Building Potent WordPress WebsitesBuilding Potent WordPress Websites
Building Potent WordPress Websites
 
Elixir/OTP for PHP developers
Elixir/OTP for PHP developersElixir/OTP for PHP developers
Elixir/OTP for PHP developers
 
PHP: 4 Design Patterns to Make Better Code
PHP: 4 Design Patterns to Make Better CodePHP: 4 Design Patterns to Make Better Code
PHP: 4 Design Patterns to Make Better Code
 
And the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack SupportAnd the Greatest of These Is ... Rack Support
And the Greatest of These Is ... Rack Support
 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
 

Viewers also liked

Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
Javier Eguiluz
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Javier Eguiluz
 
Desymfony 2011 - Introducción a Symfony2
Desymfony 2011 - Introducción a Symfony2Desymfony 2011 - Introducción a Symfony2
Desymfony 2011 - Introducción a Symfony2
Javier Eguiluz
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAlberto Gimeno
 
Curso Symfony - Clase 3
Curso Symfony - Clase 3Curso Symfony - Clase 3
Curso Symfony - Clase 3
Javier Eguiluz
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. Twig
Marcos Labad
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
Ricard Clau
 

Viewers also liked (7)

Desymfony 2011 - Twig
Desymfony 2011 - TwigDesymfony 2011 - Twig
Desymfony 2011 - Twig
 
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasosDesymfony 2011 - Tutorial #1: Instalacion y primeros pasos
Desymfony 2011 - Tutorial #1: Instalacion y primeros pasos
 
Desymfony 2011 - Introducción a Symfony2
Desymfony 2011 - Introducción a Symfony2Desymfony 2011 - Introducción a Symfony2
Desymfony 2011 - Introducción a Symfony2
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Curso Symfony - Clase 3
Curso Symfony - Clase 3Curso Symfony - Clase 3
Curso Symfony - Clase 3
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. Twig
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 

Similar to Curso Symfony - Clase 4

OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialYi-Ting Cheng
 
Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Compare Infobase Limited
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
Hisateru Tanaka
 
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)arcware
 
HTML::FormFu talk for Sydney PM
HTML::FormFu talk for Sydney PMHTML::FormFu talk for Sydney PM
HTML::FormFu talk for Sydney PM
Dean Hamstead
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request Flow
Vrann Tulika
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Phpfunkatron
 
Django - Framework web para perfeccionistas com prazos
Django - Framework web para perfeccionistas com prazosDjango - Framework web para perfeccionistas com prazos
Django - Framework web para perfeccionistas com prazos
Igor Sobreira
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8
Michelangelo van Dam
 
Using of TDD practices for Magento
Using of TDD practices for MagentoUsing of TDD practices for Magento
Using of TDD practices for Magento
Ivan Chepurnyi
 
WordPress Plugin development
WordPress Plugin developmentWordPress Plugin development
WordPress Plugin development
Mostafa Soufi
 
Ch ch-changes cake php2
Ch ch-changes cake php2Ch ch-changes cake php2
Ch ch-changes cake php2
markstory
 
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Michael Wales
 
Silex Cheat Sheet
Silex Cheat SheetSilex Cheat Sheet
Silex Cheat Sheet
Andréia Bohner
 
More Secrets of JavaScript Libraries
More Secrets of JavaScript LibrariesMore Secrets of JavaScript Libraries
More Secrets of JavaScript Libraries
jeresig
 
Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008
Rob
 
Zend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_ToolZend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_Tool
Gordon Forsythe
 

Similar to Curso Symfony - Clase 4 (20)

OSDC 2009 Rails Turtorial
OSDC 2009 Rails TurtorialOSDC 2009 Rails Turtorial
OSDC 2009 Rails Turtorial
 
Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation Zend - Installation And Sample Project Creation
Zend - Installation And Sample Project Creation
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
 
HTML::FormFu talk for Sydney PM
HTML::FormFu talk for Sydney PMHTML::FormFu talk for Sydney PM
HTML::FormFu talk for Sydney PM
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request Flow
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
 
Django - Framework web para perfeccionistas com prazos
Django - Framework web para perfeccionistas com prazosDjango - Framework web para perfeccionistas com prazos
Django - Framework web para perfeccionistas com prazos
 
Gae
GaeGae
Gae
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8
 
Using of TDD practices for Magento
Using of TDD practices for MagentoUsing of TDD practices for Magento
Using of TDD practices for Magento
 
WordPress Plugin development
WordPress Plugin developmentWordPress Plugin development
WordPress Plugin development
 
Ch ch-changes cake php2
Ch ch-changes cake php2Ch ch-changes cake php2
Ch ch-changes cake php2
 
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
Introduction to CodeIgniter (RefreshAugusta, 20 May 2009)
 
Silex Cheat Sheet
Silex Cheat SheetSilex Cheat Sheet
Silex Cheat Sheet
 
More Secrets of JavaScript Libraries
More Secrets of JavaScript LibrariesMore Secrets of JavaScript Libraries
More Secrets of JavaScript Libraries
 
Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008
 
Framework
FrameworkFramework
Framework
 
Zend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_ToolZend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_Tool
 
Extend sdk
Extend sdkExtend sdk
Extend sdk
 

More from Javier Eguiluz

deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de SymfonydeSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
Javier Eguiluz
 
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
Javier Eguiluz
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)
Javier Eguiluz
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
Javier Eguiluz
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Javier Eguiluz
 
Twig tips and tricks
Twig tips and tricksTwig tips and tricks
Twig tips and tricks
Javier Eguiluz
 
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
Javier Eguiluz
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasJavier Eguiluz
 
Wallpaper Notifier
Wallpaper NotifierWallpaper Notifier
Wallpaper Notifier
Javier Eguiluz
 
Backend (sf2Vigo)
Backend (sf2Vigo)Backend (sf2Vigo)
Backend (sf2Vigo)
Javier Eguiluz
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
Javier Eguiluz
 
Desymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseñoDesymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseño
Javier Eguiluz
 
Desymfony 2011 - Tutorial #5: Backend
Desymfony 2011 - Tutorial #5: BackendDesymfony 2011 - Tutorial #5: Backend
Desymfony 2011 - Tutorial #5: Backend
Javier Eguiluz
 
Symfony2, Jornadas Symfony
Symfony2, Jornadas SymfonySymfony2, Jornadas Symfony
Symfony2, Jornadas Symfony
Javier Eguiluz
 
Curso Symfony - Anexos
Curso Symfony - AnexosCurso Symfony - Anexos
Curso Symfony - Anexos
Javier Eguiluz
 
Curso Symfony - Clase 5
Curso Symfony - Clase 5Curso Symfony - Clase 5
Curso Symfony - Clase 5
Javier Eguiluz
 
Curso Symfony - Clase 1
Curso Symfony - Clase 1Curso Symfony - Clase 1
Curso Symfony - Clase 1
Javier Eguiluz
 

More from Javier Eguiluz (18)

deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de SymfonydeSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
deSymfony 2017: Symfony 4, Symfony Flex y el futuro de Symfony
 
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)New Symfony Tips & Tricks (SymfonyCon Paris 2015)
New Symfony Tips & Tricks (SymfonyCon Paris 2015)
 
Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)Mastering Twig (DrupalCon Barcelona 2015)
Mastering Twig (DrupalCon Barcelona 2015)
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
 
Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8Twig, el nuevo motor de plantillas de Drupal 8
Twig, el nuevo motor de plantillas de Drupal 8
 
Silex al límite
Silex al límiteSilex al límite
Silex al límite
 
Twig tips and tricks
Twig tips and tricksTwig tips and tricks
Twig tips and tricks
 
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
 
Twig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadasTwig, los mejores trucos y técnicas avanzadas
Twig, los mejores trucos y técnicas avanzadas
 
Wallpaper Notifier
Wallpaper NotifierWallpaper Notifier
Wallpaper Notifier
 
Backend (sf2Vigo)
Backend (sf2Vigo)Backend (sf2Vigo)
Backend (sf2Vigo)
 
Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)Twig avanzado (sf2Vigo)
Twig avanzado (sf2Vigo)
 
Desymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseñoDesymfony 2012 - Concurso de diseño
Desymfony 2012 - Concurso de diseño
 
Desymfony 2011 - Tutorial #5: Backend
Desymfony 2011 - Tutorial #5: BackendDesymfony 2011 - Tutorial #5: Backend
Desymfony 2011 - Tutorial #5: Backend
 
Symfony2, Jornadas Symfony
Symfony2, Jornadas SymfonySymfony2, Jornadas Symfony
Symfony2, Jornadas Symfony
 
Curso Symfony - Anexos
Curso Symfony - AnexosCurso Symfony - Anexos
Curso Symfony - Anexos
 
Curso Symfony - Clase 5
Curso Symfony - Clase 5Curso Symfony - Clase 5
Curso Symfony - Clase 5
 
Curso Symfony - Clase 1
Curso Symfony - Clase 1Curso Symfony - Clase 1
Curso Symfony - Clase 1
 

Recently uploaded

LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
DianaGray10
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Jeffrey Haguewood
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Product School
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 

Recently uploaded (20)

LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 

Curso Symfony - Clase 4