Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Symfony2 and Ror3 friends for an hour

2,665 views

Published on

Published in: Technology
  • Be the first to comment

Symfony2 and Ror3 friends for an hour

  1. 1. S f 2 & R R3 Fr f r rMonday, 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 2011Monday, June 20, 2011
  4. 4. Why this speech? W p ? Agenda A Join the f***ing J f*** f cooonfMonday, June 20, 2011
  5. 5. come utente anonimo voglio poter vedere lelenco delle conferenze ordinate per data decrescente come ua e ur voglio poter vedere lelenco 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 presentazioneMonday, 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 DHHMonday, 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 CocoaMonday, June 20, 2011
  10. 10. S f 2 Ar r DI View request Kernel Event Dispatcher response Bundle* ModelMonday, June 20, 2011
  11. 11. S • Rack • Event DrivenMonday, 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 onCoreResponseMonday, 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 endMonday, 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 • BundlesMonday, 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 endMonday, June 20, 2011
  21. 21. C r r • Function • Object method • ClosureMonday, 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 • ODMMonday, 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 endMonday, June 20, 2011
  27. 27. M • ActiveModel • Arel • ActiveResourceMonday, June 20, 2011
  28. 28. V w • Twig • Plain PHP • AsseticMonday, 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 • SASSMonday, June 20, 2011
  32. 32. TMonday, 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 /@albertobarrilaMonday, June 20, 2011

×