1 / 23

MVC in Symfony

MVC in Symfony. Sayed Ahmed B.Sc. Eng. in Computer Science & Engineering M. Sc. in Computer Science Exploring Computing for 14+ years sayed@justetc.net http://sayed.justetc.net. MVC Design Pattern. Model: defines the business logic the database belongs to this layer

milos
Download Presentation

MVC in Symfony

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. MVC in Symfony sayed@justetc.net Sayed Ahmed B.Sc. Eng. in Computer Science & Engineering M. Sc. in Computer Science Exploring Computing for 14+ years sayed@justetc.net http://sayed.justetc.net

  2. MVC Design Pattern • Model: defines the business logic • the database belongs to this layer • Classes and files related to models are stored in • lib/model/ directory • View: is what the user interacts with • a template engine is part of this layer • the View layer is mainly made of PHP templates • stored in various templates/ directories • Controller: • is a piece of code that calls the Model to get some data that it passes to the View for rendering to the client. • all requests are managed by front controllers (index.php and frontend_dev.php) • These front controllers delegate the real work to actions. • these actions are logically grouped into modules sayed@justetc.net

  3. MVC in Picture sayed@justetc.net

  4. The Layout • The pages generated by Symfony by default has similar structure such as • Header • Template/Body • Footer • We can separate the Headers and Footers from each page • and place them in a single central place • and link them (header and footer files) to all pages • We can use a Design Pattern for the purpose • decorator design pattern • http://en.wikipedia.org/wiki/Decorator_pattern sayed@justetc.net

  5. The Decorator Pattern sayed@justetc.net

  6. The Decorator Pattern sayed@justetc.net

  7. Decoration in Symfony • the template is decorated • after the content is rendered by a global template • called a layout in symfony sayed@justetc.net

  8. Decoration in Symfony • The default layout of an application is called layout.php • and can be found in the apps/frontend/templates/ directory • This directory contains all the global templates for an application • Important: • You can modify the layout to include all the extra stuff that you need for all pages including the headers and footers • You can replace the default symfony layout with your own layout and create a section for the body/template • In the example layout file • http://www.symfony-project.org/jobeet/1_4/Doctrine/en/04 • $sf_content is the main content/template as seen in the pictures of the page • $sf_content is the generated HTML based on the current page • it is defined by the framework itself and contains the HTML generated by the action. sayed@justetc.net

  9. Image, CSS, and JS Files • web/images/ • web/css/ • the generate:project task has created three directories for the project assets: web/images/ for images, web/~css|CSS~/ for stylesheets, and web/js/ for JavaScripts sayed@justetc.net

  10. Helper • A helper is a function, • defined by symfony, • that can take parameters and returns HTML code. • Most of the time, helpers are • time-savers, • they package code snippets frequently used in templates • The include_stylesheets() helper generates <link> tags for stylesheets. sayed@justetc.net

  11. Helper, Stylesheets, and View • The stylesheetfiles can be included by the include_stylesheets() function call • But how does the helper know which stylesheets to include? • Using View layer • View layer generated by • generate:app sayed@justetc.net

  12. View layer generated bygenerate:app for the template ‘layout’ sayed@justetc.net

  13. Stylesheets, and View • stylesheets: [main.css, jobs.css, job.css] • symfonyprefixes relative paths with /~css|CSS~/. • Change media • stylesheets: [main.css, jobs.css, job.css, print: { media: print }] • The view.yml configuration file can be customized on a per-module basis • create a view.yml file in the apps/frontend/modules/job/config/ directory • # apps/frontend/modules/job/config/view.yml • indexSuccess: • stylesheets: [jobs.css]   • showSuccess: • stylesheets: [job.css] sayed@justetc.net

  14. Templates • indexSuccess and showSuccess sections are the template names associated with the index and show actions respectively sayed@justetc.net

  15. Configuration Principles in symfony • Configuration Principles in symfony • For many symfony configuration files, the same setting can be defined at different levels: • The default configuration is located in the framework • The global configuration for the project (in config/) • The local configuration for an application (in apps/APP/config/) • The local configuration restricted to a module (in apps/APP/modules/MODULE/config/) • At runtime, the configuration system merges all the values from the different files if they exist and caches the result for better performance. • use_stylesheet() helper can be used (in the template file) to include a stylesheet from a template: • Instead of using view.yml sayed@justetc.net

  16. Linking to javaScript files • Symmetrically, the JavaScript configuration is done via the javascripts entry of the view.yml configuration file and the use_javascript() helper defines JavaScript files to include for a template. • use_javascript() helper defines JavaScript files to include for a template. sayed@justetc.net

  17. Actions and templates • The index action is the Controller part of the page and the associated template, indexSuccess.php, is the View part: sayed@justetc.net

  18. The Action • Each action is represented by a method of a class • For the job homepage, the class is jobActions (the name of the module suffixed by Actions) • and the method is executeIndex() (execute suffixed by the name of the action). • It retrieves all the jobs from the database sayed@justetc.net

  19. The Template • By default, the template name associated with an action is deduced by symfony sayed@justetc.net

  20. The "forward" Methods Family • $this->forward404If(!$this->job); • $this->forward404(); • $this->forward('default', '404'); sayed@justetc.net

  21. The Request and the Response • The Request • The sfWebRequest class wraps the $_SERVER, $_COOKIE, $_GET, $_POST, and $_FILES PHP global arrays: • Method name -- PHP equivalent • getMethod() -- $_SERVER['REQUEST_METHOD'] • getUri() $_SERVER['REQUEST_URI'] • getReferer() $_SERVER['HTTP_REFERER'] • getHost() $_SERVER['HTTP_HOST'] • getLanguages() $_SERVER['HTTP_ACCEPT_LANGUAGE'] • getCharsets() $_SERVER['HTTP_ACCEPT_CHARSET'] • isXmlHttpRequest() $_SERVER['X_REQUESTED_WITH'] == 'XMLHttpRequest' • getHttpHeader() $_SERVER • getCookie() $_COOKIE • isSecure() $_SERVER['HTTPS'] • getFiles() $_FILES getGetParameter() $_GET • getPostParameter() $_POST • getUrlParameter() $_SERVER['PATH_INFO'] • getRemoteAddress() $_SERVER['REMOTE_ADDR'] sayed@justetc.net

  22. The Response • The Response • The sfWebResponse class wraps the header() and setrawcookie() PHP methods: • Method name PHP equivalent • setCookie() setrawcookie() • setStatusCode() header() • setHttpHeader() header() • setContentType() header() • addVaryHttpHeader() header() • addCacheControlHttpHeader() header() sayed@justetc.net

  23. references • http://www.symfony-project.org/jobeet/1_4/Doctrine/en/05 sayed@justetc.net

More Related