symfony2 and ror3 friends for an hour
TRANSCRIPT
S!"f#$! 2&
R#R 3Fr%&$'( f#r )$ *#+r
Monday, June 20, 2011
A,&(()$'r# C%$&,,%S)$'r# P)-)$#..%
A,b&r.# B)rr%,à
Monday, June 20, 2011
Brescia - 24 settembre 2011
Monday, June 20, 2011
Why this speech?Agenda
Join the f***ing cooonf
W*! .*%( (p&&/*?A-&$')
J#%$ .*& f***%$- /###$f
Monday, June 20, 2011
come utente anonimo voglio poter vedere l'elenco delle conferenze ordinate per data decrescentecome ua e ur voglio poter vedere l'elenco delle presentazioni di una conferenza ordinate in data crescentecome ua e ur voglio porer vedere il dettaglio di una presenzationecome ua voglio potermi registrarecome ur voglio poter aderire ad una conferenzacome ur voglio poter commentare una conferenzacome ur voglio poter commentare una presentazione
Monday, June 20, 2011
http://joinconf.heroku.com https://github.com/cirpo/joinconf
only Firefox 4 and Chrome 10+https://github.com/sandropaganoti/joinconf
Monday, June 20, 2011
R#R 3• Thank you Trygve Reenskaug• Thank you Matz• Thank you DHH
Monday, June 20, 2011
R+b! #$ R)%,( Ar/*%.&/.+r&
web server
rack stackmiddleware 1
...
middleware N View
ModelActionControllerMiddlewareStack
Controller.new.process(action)
run Joinconf::Application.routesrequestresponse
Monday, June 20, 2011
S!"f#$! 2• Thank you RoR• Thank you Fabien• Thank you Doctrine• Thank you Spring• Thank you Cocoa
Monday, June 20, 2011
S!"f#$!2 Ar/*%.&/.+r&View
Model
request
response
Kernel
DI
Event Dispatcher
Bundle*
Monday, June 20, 2011
S.)/0• Rack• Event Driven
Monday, June 20, 2011
<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
services: ideato.joinconf.admin.talk: class: Ideato\DunlopBundle\Admin\NewsAdmin tags: - { name: sonata.admin, manager_type: orm, group: Donlup News, label: News } arguments: [null, Ideato\DunlopBundle\Entity\News, IdeatoDunlopBundle:NewsAdmin]
Monday, June 20, 2011
namespace Ideato\JoinConfBundle\DataFixtrues\ORM;
use Doctrine\Common\DataFixtures\FixtureInterface;use Symfony\Component\DependencyInjection\ContainerInterface;use Symfony\Component\DependencyInjection\ContainerAwareInterface;
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", "[email protected]", false, true); $creator->create("odracci", "odracci", "[email protected]", false, true); $creator->create("alberto.barrila", "suka", "[email protected]", false, true); $creator->create("sandro.paganotti", "suka", "[email protected]", false, true);
Monday, June 20, 2011
S!"f#$!
Stacke.g.: Symfony\Component\HttpKernel
onCoreRequestonCoreExceptiononCoreViewonCoreControlleronCoreResponse
Monday, June 20, 2011
R#+.&(always tell your mama
before you go off somewhere!
Monday, June 20, 2011
R)%,( resources :conferences do resources :comments resources :sessions do resources :comments end resources :attendees end
Monday, June 20, 2011
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
M#'+,)r%.!• Routes to Rack and Engines• Bundles
Monday, June 20, 2011
C#$.r#,,&rclass ConferencesController < ApplicationController def index @conferences = Conference.all respond_with @conferences end def show @conference = Conference.find(params[:id]) endend
Monday, June 20, 2011
C#$.r#,,&r• Function • Object method• Closure
Monday, June 20, 2011
namespace Ideato\JoinConfBundle\Controller;
use Ideato\JoinConfBundle\Entity\Conference;use Symfony\Bundle\FrameworkBundle\Controller\Controller;
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));
C#$.r#,,&r
Monday, June 20, 2011
M#'&,• Doctrine 2• POPO• DataMapper• ODM
Monday, June 20, 2011
namespace Ideato\JoinConfBundle\Entity;
/** * @orm:Entity(repositoryClass="Ideato\JoinConfBundle\Repositories\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;
M#'&,
Monday, June 20, 2011
namespace Ideatp\JoinConfBundle\Entity;
/** * @orm:Entity(repositoryClass="Cirpo\JoinConfBundle\Repositories\SessionRepository") */class Talk {
/** * @orm:Id * @orm:Column(type="integer") * @orm:GeneratedValue(strategy="AUTO") */ private $id; /** * @orm:Column(type="string", length="255") */ private $title; /** * @ORM\OneToMany(targetEntity="User", mappedBy="talk") */ private $speakers;
M#'&,
Monday, June 20, 2011
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
M#'&,• ActiveModel• Arel• ActiveResource
Monday, June 20, 2011
V%&w• Twig• Plain PHP• Assetic
Monday, June 20, 2011
View{% if loop.index is not divisibleby(3) %}
{{ 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
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
V%&w• ERb• HTML 5• CoffeScript• SASS
Monday, June 20, 2011
T&(.
Monday, June 20, 2011
Monday, June 20, 2011
Any Questions ????
Monday, June 20, 2011
[email protected] /@cirpo [email protected] /@sandropaganotti
[email protected] /@albertobarrila
S# ,#$-, )$'.*)$0( f#r ),, .*& 1(*
Monday, June 20, 2011