Successfully reported this slideshow.
Your SlideShare is downloading. ×

Symfony2 and Ror3 friends for an hour

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

Symfony2 and Ror3 friends for an hour

  1. 1. S f 2 & R R3 Fr f r r Monday, June 20, 2011
  2. 2. A r C S r P A b r B rr à Monday, June 20, 2011
  3. 3. Brescia - 24 settembre 2011 Monday, June 20, 2011
  4. 4. Why this speech? W p ? Agenda A Join the f***ing J f*** f cooonf Monday, June 20, 2011
  5. 5. come utente anonimo voglio poter vedere l'elenco delle conferenze ordinate per data decrescente come ua e ur voglio poter vedere l'elenco delle presentazioni di una conferenza ordinate in data crescente come ua e ur voglio porer vedere il dettaglio di una presenzatione come ua voglio potermi registrare come ur voglio poter aderire ad una conferenza come ur voglio poter commentare una conferenza come ur voglio poter commentare una presentazione Monday, June 20, 2011
  6. 6. http://joinconf.heroku.com https://github.com/cirpo/joinconf https://github.com/sandropaganoti/joinconf only Firefox 4 and Chrome 10+ Monday, June 20, 2011
  7. 7. R R3 • Thank you Trygve Reenskaug • Thank you Matz • Thank you DHH Monday, June 20, 2011
  8. 8. R b R Ar r rack stack middleware 1 web server ... middleware N View response request run Joinconf::Application.routes ActionController MiddlewareStack Model Controller.new.process(action) Monday, June 20, 2011
  9. 9. S f 2 • Thank you RoR • Thank you Fabien • Thank you Doctrine • Thank you Spring • Thank you Cocoa Monday, June 20, 2011
  10. 10. S f 2 Ar r DI View request Kernel Event Dispatcher response Bundle* Model Monday, June 20, 2011
  11. 11. S • Rack • Event Driven Monday, June 20, 2011
  12. 12. <services> <service id="fos_user.controller.user" class="%fos_user.controller.user.class%"> <call method="setContainer"> <argument type="service" id="service_container" /> </call> <tag name="security.secure_service" /> </service> <service id="fos_user.controller.security" class="%fos_user.controller.security.class%"> <call method="setContainer"> <argument type="service" id="service_container" /> </call> </service> </services> Monday, June 20, 2011
  13. 13. services: ideato.joinconf.admin.talk: class: IdeatoDunlopBundleAdminNewsAdmin tags: - { name: sonata.admin, manager_type: orm, group: Donlup News, label: News } arguments: [null, IdeatoDunlopBundleEntityNews, IdeatoDunlopBundle:NewsAdmin] Monday, June 20, 2011
  14. 14. namespace IdeatoJoinConfBundleDataFixtruesORM; use DoctrineCommonDataFixturesFixtureInterface; use SymfonyComponentDependencyInjectionContainerInterface; use SymfonyComponentDependencyInjectionContainerAwareInterface; class UserFixtures implements FixtureInterface, ContainerAwareInterface { private $container; public function setContainer(ContainerInterface $container = null) { $this->container = $container; } public function load($manager) { $creator = $this->container->get('fos_user.user_creator'); $creator->create("Ideato", "Ideato", "alessandro.cinelli@gmail.com", false, true); $creator->create("odracci", "odracci", "odracci@gmail.com", false, true); $creator->create("alberto.barrila", "suka", "alberto.barilla@gmail.com", false, true); $creator->create("sandro.paganotti", "suka", "sandro.paganotti@gmail.com", false, true); Monday, June 20, 2011
  15. 15. S f e.g.: SymfonyComponentHttpKernel Stack onCoreRequest onCoreException onCoreView onCoreController onCoreResponse Monday, June 20, 2011
  16. 16. R always tell your mama before you go off somewhere! Monday, June 20, 2011
  17. 17. R resources :conferences do resources :comments resources :sessions do resources :comments end resources :attendees end Monday, June 20, 2011
  18. 18. Symfony _welcome: pattern: / defaults: { _controller: 'IdeatoJoinConfBundle:Homepage:index' } conference: pattern: /conference/{slug} defaults: { _controller: 'IdeatoJoinConfBundle:Blog:show', slug: 1 } requirements: page: d+ Monday, June 20, 2011
  19. 19. M r • Routes to Rack and Engines • Bundles Monday, June 20, 2011
  20. 20. C r r class ConferencesController < ApplicationController def index @conferences = Conference.all respond_with @conferences end def show @conference = Conference.find(params[:id]) end end Monday, June 20, 2011
  21. 21. C r r • Function • Object method • Closure Monday, June 20, 2011
  22. 22. C r r namespace IdeatoJoinConfBundleController; use IdeatoJoinConfBundleEntityConference; use SymfonyBundleFrameworkBundleControllerController; class HomepageController extends Controller { public function indexAction() { $conference_repository = $this->get('doctrine.orm.entity_manager') ->getRepository('IdeatoJoinConfBundle:Conference'); $conferences = $conference_repository ->retrieveConferencesByAscendingOrder(); return $this->render ( ('IdeatoJoinConfBundle:Default:index.html.twig', array('conferences' => $conferences)); Monday, June 20, 2011
  23. 23. M • Doctrine 2 • POPO • DataMapper • ODM Monday, June 20, 2011
  24. 24. M namespace IdeatoJoinConfBundleEntity; /** * @orm:Entity(repositoryClass="IdeatoJoinConfBundleRepositories ConferenceRepository") */ class Conference { /** * @orm:Id * @orm:Column(type="integer") * @orm:GeneratedValue(strategy="AUTO") */ private $id; /** * @orm:Column(type="string", length="255") */ private $title; /** * @orm:Column(type="datetime") */ private $date; Monday, June 20, 2011
  25. 25. M namespace IdeatpJoinConfBundleEntity; /** * @orm:Entity(repositoryClass="CirpoJoinConfBundleRepositories SessionRepository") */ class Talk { /** * @orm:Id * @orm:Column(type="integer") * @orm:GeneratedValue(strategy="AUTO") */ private $id; /** * @orm:Column(type="string", length="255") */ private $title; /** * @ORMOneToMany(targetEntity="User", mappedBy="talk") */ private $speakers; Monday, June 20, 2011
  26. 26. M class Conference < ActiveRecord::Base validates :name, :start, :end, :users_max, :location, :presence => true default_scope :order => "start DESC" has_many :sessions has_many :attendees has_many :comments, :as => :commentable end Monday, June 20, 2011
  27. 27. M • ActiveModel • Arel • ActiveResource Monday, June 20, 2011
  28. 28. V w • Twig • Plain PHP • Assetic Monday, June 20, 2011
  29. 29. {% if loop.index is not divisibleby(3) %} View {{ post.published_at|date("m/d/Y") }} {{ "I like %this% and %that%."|replace({'%this %': foo, '%that%': "bar"}) }} {{ var.foo|default('foo item on var is not defined') }} {{ var is even }} {{ var is odd }} {% if foo.attribute is sameas(false) %} {% for i in range(0, 3) %} Monday, June 20, 2011
  30. 30. V w <section id="conferences"> <h1><%= I18n.t(:conference_list)%></h1> <%= render @conferences %> </section> <article class="conference"> <header> <h1><%= conference.name %></h1> <dl> <!-- some stuff --> </dl> </header> <p><%= conference.description %></p> <footer> <menu> <li><%= link_to I18n.t(:view_the_sessions ), conference_sessions_path(conference)%></li> <!-- other links --> </menu> </footer> </article> Monday, June 20, 2011
  31. 31. V w • ERb • HTML 5 • CoffeScript • SASS Monday, June 20, 2011
  32. 32. T Monday, June 20, 2011
  33. 33. Monday, June 20, 2011
  34. 34. Any Questions ???? Monday, June 20, 2011
  35. 35. S , f r alessandro.cinelli@gmail.com /@cirpo sandro.paganotti@wavegroup.it /@sandropaganotti alberto.barrila@wavegroup.it /@albertobarrila Monday, June 20, 2011

×