symfony on action - WebTech 207

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    6 Favorites

    symfony on action - WebTech 207 - Presentation Transcript

    1. symfony in action. WebTech 2007
    2. symfony ? • PHP 5 Web Framework • Based on well-known projets (Mojavi, Propel, Prado …) • Open-Source (MIT licence) • Sponsored by Sensio ( http://www.sensio.com/ )
    3. cite from symfony book If you have been looking for a Rails/Django-like framework for PHP projects with features such as: · simple templating and helpers · cache management · multiple environments support · deployment management · scaffolding · smart URLs · multilingual and I18N support · object model and MVC separation · Ajax support ...where all elements work seamlessly together, then symfony is made for you
    4. don’t reinvent the wheel • Follow best practices • MVC Pattern : Model / View / Controller • Unit and functional test framework • Environment and deployment support • Security (XSS protection) • Extensible (plugin system)
    5. a professional web framework • Built from experience • 1.0 stable, maintained with commercial support • Growing community – Developpers in more than 80 countries – 100 000 visitors per month on symfony-project.com • Open-Source Documentation – The book (450 pages - GFDL) – Askeet Tutorial (250 pages)
    6. Sounds good ? Let’s try it !
    7. requirements • PHP5 • Web server (Apache) • RDBMS (MySQL)
    8. installation • Sandbox > wget http://www.symfony-project.com/get/sf_sandbox.tgz • PEAR > pear channel-discover pear.symfony-project.com > pear install symfony/symfony • Subversion > svn checkout http://svn.symfony-project.com/branches/1.0/ .
    9. init new symfony project Project Application(s) > mkdir WebTechComments > cd WebTechComments Module(s) > symfony init-project WebTechComments Actions(s) > symfony init-app frontend Composant(s) Template
    10. web server configuration <VirtualHost *:80> ServerName WebTechComments DocumentRoot \"/path/to/project/web\" DirectoryIndex index.php Alias /sf /path/to/symfony/data/symfony/web/sf <Directory \"/path/to/project/web\"> AllowOverride All </Directory> </VirtualHost>
    11. demo Congratulations! You have successfully created your symfony project.
    12. object-relational mapping • Tables as classes and records as objects public function getName() { return $this->getFirstName.' '.$this->getLastName(); Relational Object-Oriented } Table Class public function getTotal() Row, record Object { $total = 0; Field, column Property foreach ($this->getItems() as $item) { $total += $item->getPrice() * $item->getQuantity(); }   return $total; } • Object and Peer classes $article = new Article(); ... $title = $article->getTitle(); $articles = ArticlePeer::retrieveByPks(array(123, 124, 125));
    13. create database schema #/config/schema.yml propel: sessions: _attributes: { phpName: Session } id: date: timestamp speaker: varchar(255) topic: varchar(255) description: longvarchar comments: _attributes: { phpName: Comment } id: sessions_id: type: integer foreignTable: sessions foreignReference: id onDelete: cascade phpName: SessionId peerName: SESSION_ID author: varchar(255) content: longvarchar created_at:
    14. build model and database • Configuration – database access – Propel properties • Build model > symfony propel-build-model • Build SQL > symfony propel-build-sql • Create database > symfony propel-insert-sql • Do them all > symfony propel-build-all
    15. define some test data • Test data # data/fixtures/data.yml Session: > symfony propel-load-data frontend s1: date: 06/29/2007 speaker: Test Speaker topic: Test Topic description: Just for testing Comment: c1: sessions_id: s1 author: Teo Tester content: It’s better when other do the tests
    16. scafolding • Create / Retrieval / Update / Delete (CRUD) • Initiating or Generating Code > symfony <TASK_NAME> <APP_NAME> <MODULE_NAME> <CLASS_NAME> tasks: propel-init-crud, propel-generate-crud, and propel-init-admin > symfony propel-generate-crud frontend session Session > symfony propel-init-crud frontend comment Comment
    17. routing homepage: Internal URI url: / <module>/<action>[?param1=value1][&param2=value2] param: { module: session, action: list } <?php echo url_for(‘@homepage’) ?> => / External URL http://www.example.com/module/action/[param1/value1] session_view: url: /session/:id.html param: { module: session, action: view } requirements: id: \\d+ <?php echo link_to(‘@sesion_view?id=’.$session->getId()) ?> => /session/12.html default: url: /:module/:action/* <?php echo url_for(‘session/view?id=’.$session->getId()) ?> => /session/view/id/12
    18. view • Templates • Helpers • Page layout • Code fragments – Partials – Components – Slots
    19. view <h1>Welcome</h1> • Templates <p>Welcome back, <?php echo $name ?>!</p> <p>What would you like to do?</p> <ul> • Helpers <li><?php echo link_to('Read', 'article/read') ?></li> <li><?php echo link_to(‘Write', 'article/write') ?></li> • Page layout </ul> • Code fragments – Partials – Components – Slots
    20. view <?php echo use_helper('HelperName') ?> <?php echo use_helper('HelperName1', 'HelperName2' ) ?> • Templates <?php echo tag('input', array('name' => 'foo', 'type' => 'text')) ?> • Helpers <?php echo tag('input', 'name =foo type=text') ?> => <input name=\"foo\" type=\"text\" /> • Page layout • Code fragments – Partials – Components – Slots
    21. view • Templates • Helpers • Page layout • Code fragments – Partials – Components – Slots
    22. view • Templates • Helpers • Page layout • Code fragments – Partials – Components – Slots
    23. view • Templates • Helpers • Page layout • Code fragments – Partials – Components – Slots
    24. view • Templates • Helpers • Page layout • Code fragments – Partials – Components – Slots
    25. controller • Front controller • Actions • Request • User sessions • Validation • Filters
    26. controller 1 Define the core constants. • Front controller 2 Locate the symfony libraries. 3 Load and initiate the core framework classes. • Actions 4 Load the configuration. 5 Decode the request URL to determine the action to execute and the request parameters. • Request 6 If the action does not exist, redirect to the 404 error action. 7 Activate filters (for instance, if the request needs • User sessions authentication). 8 Execute the filters, first pass. • Validation 9 Execute the action and render the view. 10 Execute the filters, second pass. • Filters 11# Output the response
    27. controller class mymoduleActions extends sfActions { public function executeIndex() { • Front controller // Retrieving request parameters $password = $this->getRequestParameter('password'); • Actions // Retrieving controller information $moduleName = $this->getModuleName(); $actionName = $this->getActionName();   • Request // Retrieving framework core objects $request = $this->getRequest(); • User sessions $userSession = $this->getUser(); $response = $this->getResponse(); • Validation // Setting action variables to pass information to the template $this->setVar('foo', 'bar'); • Filters $this->foo = 'bar'; // Shorter version   } }
    28. controller $this->getRequest()-> getMethod() sfRequest::GET sfRequest::POST • Front controller getCookie('foo') isXmlHttpRequest() isSecure() • Actions hasParameter('foo') getParameter('foo') • Request getParameterHolder()->getAll() getLanguages() • User sessions getAcceptableContentTypes() getFileNames() • Validation getFileSize($fileName) getFileType($fileName) • Filters setAttribute(‘foo’) getAttribute(‘foo’)
    29. controller $this->getUser()-> • Front controller setAttribute('nickname', $nickname) • Actions getAttribute('nickname', ‘Default') getAttributeHolder()->remove('nickname') • Request getAttributeHolder()->clear() • User sessions $this->setFlash('attrib', $value) • Validation $this->getFlash('attrib') • Filters
    30. controller class myModuleActions extends sfActions { public function validateMyAction() • Front controller { return ($this->getRequestParameter('id') > 0); } • Actions public function handleErrorMyAction() { • Request $this->message = \"Invalid parameters\"; return sfView::SUCCESS; • User sessions } public function executeMyAction() • Validation { $this->message = \"The parameters are correct\"; } • Filters }
    31. controller • Front controller • Actions • Request • User sessions • Validation • Filters
    32. Live demo !
    33. Questions ? Петър Вукадинов (patter) p.vukadinov@pi-consult.bg p.vukadinov@gmail.com

    + patterpatter, 3 years ago

    custom

    8090 views, 6 favs, 3 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 8090
      • 7901 on SlideShare
      • 189 from embeds
    • Comments 0
    • Favorites 6
    • Downloads 347
    Most viewed embeds
    • 175 views on http://vukadinov.blogspot.com
    • 13 views on http://egze.blogspot.com
    • 1 views on http://209.85.129.104

    more

    All embeds
    • 175 views on http://vukadinov.blogspot.com
    • 13 views on http://egze.blogspot.com
    • 1 views on http://209.85.129.104

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories