Just married: Zend
        Framework and Doctrine
                              Benjamin Eberlei
                         ...
About Me

          Benjamin Eberlei
          direkt effekt GmBH
          (digital marketing)
          Open Source contr...
And You?




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   3 / 55
Model vs Persistence


                       Model
                         =
                      Your code
Eberlei (di...
Model vs Persistence


           Persistence
                =
        Framework Code
Eberlei (direkt effekt GmbH)   ZF an...
Model vs Persistence


          Model = Your code
          Persistence = Framework Code
          You can implement the ...
Zend Framework Persistence

          Zend Db - Abstraction Layer




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IP...
Zend Framework Persistence

          Zend Db - Abstraction Layer
          Zend Db Select - SQL Query Object




Eberlei ...
Zend Framework Persistence

          Zend Db - Abstraction Layer
          Zend Db Select - SQL Query Object
          Ze...
Zend Framework Persistence

          Zend Db - Abstraction Layer
          Zend Db Select - SQL Query Object
          Ze...
Doctrine 1


          Object-Relational Mapping, Active Record




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC ...
Doctrine 1


          Object-Relational Mapping, Active Record
          Doctrine Query Language




Eberlei (direkt effek...
Doctrine 1


          Object-Relational Mapping, Active Record
          Doctrine Query Language
          Hydrators




...
Doctrine 1


          Object-Relational Mapping, Active Record
          Doctrine Query Language
          Hydrators
    ...
Doctrine Modelling Workflow

    1. Setup Doctrine Bootstrap




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spri...
Doctrine Modelling Workflow

    1. Setup Doctrine Bootstrap
    2. Define a YAML Schema




Eberlei (direkt effekt GmbH)   Z...
Doctrine Modelling Workflow

    1. Setup Doctrine Bootstrap
    2. Define a YAML Schema
    3. Generate Model and Table PHP...
Doctrine Modelling Workflow

    1.    Setup Doctrine Bootstrap
    2.    Define a YAML Schema
    3.    Generate Model and ...
Doctrine Modelling Workflow

    1.    Setup Doctrine Bootstrap
    2.    Define a YAML Schema
    3.    Generate Model and ...
Doctrine Modelling Workflow

    1.    Setup Doctrine Bootstrap
    2.    Define a YAML Schema
    3.    Generate Model and ...
A Doctrine Project Layout


          Non-PEAR Structure




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring ...
A Doctrine Project Layout


          Non-PEAR Structure
          No Module Prefixes




Eberlei (direkt effekt GmbH)   ZF ...
A Doctrine Project Layout


          Non-PEAR Structure
          No Module Prefixes
          Autoloading?




Eberlei (d...
A Doctrine Project Layout


          Non-PEAR Structure
          No Module Prefixes
          Autoloading?
          Confi...
A Doctrine Project Layout


          Non-PEAR Structure
          No Module Prefixes
          Autoloading?
          Confi...
Zend Framework Projects


          Model * in models/




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 20...
Zend Framework Projects


          Model * in models/
          Single Module Project




Eberlei (direkt effekt GmbH)   Z...
Zend Framework Projects


          Model * in models/
          Single Module Project
          Not PEAR Standard




Ebe...
Zend Framework Projects


          Model * in models/
          Single Module Project
          Not PEAR Standard
       ...
Modular ZF Project



          Each Module has models/




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2...
Modular ZF Project



          Each Module has models/
          Again Special Autoloader




Eberlei (direkt effekt GmbH)...
ZF + Doctrine Integration
          Not a ZF Component




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 20...
ZF + Doctrine Integration
          Not a ZF Component
          Download:
          http://github.com/beberlei/zf-doctrin...
ZF + Doctrine Integration
          Not a ZF Component
          Download:
          http://github.com/beberlei/zf-doctrin...
ZF + Doctrine Integration
          Not a ZF Component
          Download:
          http://github.com/beberlei/zf-doctrin...
ZF + Doctrine Integration
          Not a ZF Component
          Download:
          http://github.com/beberlei/zf-doctrin...
ZF + Doctrine Integration
          Not a ZF Component
          Download:
          http://github.com/beberlei/zf-doctrin...
ZF + Doctrine Integration
          Not a ZF Component
          Download:
          http://github.com/beberlei/zf-doctrin...
ZF + Doctrine Integration
          Not a ZF Component
          Download:
          http://github.com/beberlei/zf-doctrin...
Zend Application Resource


  1. Install using Zend Tool:
  zf create project forum
  zf create-project doctrine –dsn=$DSN...
Zend Application Resource
  2. Register manually with Zend Application
   resources . doctrine . connections . default . d...
Configuring the Application
Resource
  Configuring Connection DSN
   resources . doctrine . connections . < name >. dsn


  ...
ZFDoctrine Conventions
          Both ZF 1 and Doctrine 1 are magic boxes




Eberlei (direkt effekt GmbH)   ZF and Doctrin...
ZFDoctrine Conventions
          Both ZF 1 and Doctrine 1 are magic boxes
          Enforcing Conventions




Eberlei (dir...
ZFDoctrine Conventions
          Both ZF 1 and Doctrine 1 are magic boxes
          Enforcing Conventions
          Model ...
ZFDoctrine Conventions
          Both ZF 1 and Doctrine 1 are magic boxes
          Enforcing Conventions
          Model ...
A Doctrine Project
  zf create project forum
  zf create-project doctrine –dsn

  Creating four essential Doctrine Directo...
Example Yaml schema: Forum
  Put a forum.yml in the schema directory:
   F o rum_Mod e l _ C a t e g o r y :
       column...
Generate Models from Yaml


  zf generate-models-from-yaml doctrine




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   ...
Generate Models from Yaml


  zf generate-models-from-yaml doctrine

  Generate Table Classes (application.ini)
   resourc...
Generate Models




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   21 / 55
Generate Models




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   22 / 55
Generated Model Classes


          Records
          Base Records
          Tables




Eberlei (direkt effekt GmbH)   ZF a...
Code Generation?

          Doctrine creates Models from Yaml files.




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   ...
Code Generation?

          Doctrine creates Models from Yaml files.
          ...optionally(!)




Eberlei (direkt effekt G...
Code Generation?

          Doctrine creates Models from Yaml files.
          ...optionally(!)
          You can skip Yaml...
Code Generation?

          Doctrine creates Models from Yaml files.
          ...optionally(!)
          You can skip Yaml...
Generated Record:
   class For u m _ M o de l _ C ategory extends
       Forum_Model_Base_Category
   {
   }


  Generated...
abstract class F o r u m _ M o d e l _ B a s e _ C a t e g o r y extends
       Doctrine_Record
   {
       public functio...
Generating Database


  zf build-project doctrine –reload
          Drop and Create Database
          Create Tables
     ...
Migrations


  Update your Database Schema:
          zf show-migration doctrine




Eberlei (direkt effekt GmbH)   ZF and ...
Migrations


  Update your Database Schema:
          zf show-migration doctrine
          zf generate-migration doctrine
...
Migrations


  Update your Database Schema:
          zf show-migration doctrine
          zf generate-migration doctrine
...
Forms for Doctrine Models


          Using Doctrine Metadata for other, non
          ORM purposes




Eberlei (direkt eff...
Forms for Doctrine Models


          Using Doctrine Metadata for other, non
          ORM purposes
          Configuration...
Forms for Doctrine Models


          Using Doctrine Metadata for other, non
          ORM purposes
          Configuration...
A Simple Form


   $form = new Z F D o c t r i ne_Fr om_M odel ( array (
       ’ model ’ = > ’ F o r um_Model_Category ’ ...
A Simple Form: Tweaking

   $form = new Z F D o c t r i ne_Fo rm_M odel ( array (
       ’ model ’ = > ’ F o r um_Model_Ca...
A Simple Form: Tweaking




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   32 / 55
A Simple Form: Controller

   public function add CategoryAction ()
   {
       $form = $this - > createCategoryForm () ;
...
A Simple Form: Updating
   public function e di tCategoryAction ()
   {
       $categoryId = $this - > _getParam ( ’ id ’)...
A Simple Form: Action Helper

   public function add CategoryAction ()
   {
       $form = $this - > createCategoryForm ()...
Advanced Forms: Relations
  Relations rendered as (multi-)select fields:
   public function addBoardAction ()
   {
       $...
Advanced Forms: Relations
  Relations rendered as (multi-)select fields:
   public function addBoardAction ()
   {
       $...
Advanced Forms: Relations




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   37 / 55
Advanced Forms: Hooks

          Add Validators and Filters




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spri...
Advanced Forms: Hooks

          Add Validators and Filters
          Change Decorators




Eberlei (direkt effekt GmbH)   ...
Advanced Forms: Hooks

          Add Validators and Filters
          Change Decorators
          Use jQuery or Dojo Integ...
Advanced Forms: Hooks

          Add Validators and Filters
          Change Decorators
          Use jQuery or Dojo Integ...
Advanced Forms: Hooks
  Adding decorators in preGenerate():
   class Forum _Form_T hread extends ZFDo ctrin e_Fo rm_Mo del...
Advanced Forms: Hooks

  jQuery or Dojo Enable a Form:
   class Forum _Form_T hread extends ZFDo ctrin e_Fo rm_Mo del
   {...
Advanced Forms: Hooks

  Adding a validator in postGenerate():
   class Forum _Form_T hread extends ZFDo ctrin e_Fo rm_Mo ...
Paginator Adapter

  Paginate a Doctrine Query:
   $query = Doctrine_Query :: create () ; // $query ...
   $adapter =
    ...
Paginator Adapter

  Paginate a Doctrine Query:
   $query = Doctrine_Query :: create () ; // $query ...
   $adapter =
    ...
Model List View Helper


          Creates a paginated list for a model




Eberlei (direkt effekt GmbH)   ZF and Doctrine ...
Model List View Helper


          Creates a paginated list for a model
          Links to CRUD actions




Eberlei (direk...
Model List View Helper


          Creates a paginated list for a model
          Links to CRUD actions
          Reasonab...
Model List View Helper


          Creates a paginated list for a model
          Links to CRUD actions
          Reasonab...
Model List View Helper
   <h1 > Boards </ h1 >

   <?= $this - > modelList ( ’ Forum_Model_Board ’) ; ? >




Eberlei (dir...
Model List View Helper
   <h1 > Boards </ h1 >

   <?= $this - > modelList ( ’ Forum_Model_Board ’) ; ? >


   <h1 > Board...
Model List View Helper




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   45 / 55
Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   46 / 55
Questions?




Eberlei (direkt effekt GmbH)     ZF and Doctrine 1   IPC Spring 2010   47 / 55
Zend Framework 2.0

          Currently Conversion to Namespaces




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC...
Zend Framework 2.0

          Currently Conversion to Namespaces
          Specified Goals:
             1. Ease the learni...
Zend Framework 2.0

          Currently Conversion to Namespaces
          Specified Goals:
             1. Ease the learni...
Doctrine 2

          Separation of DBAL and ORM




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   4...
Doctrine 2

          Separation of DBAL and ORM
          Less Magic, More Explicit Design




Eberlei (direkt effekt GmbH...
Doctrine 2

          Separation of DBAL and ORM
          Less Magic, More Explicit Design
          DataMapper instead o...
Doctrine 2

          Separation of DBAL and ORM
          Less Magic, More Explicit Design
          DataMapper instead o...
Doctrine 2

          Separation of DBAL and ORM
          Less Magic, More Explicit Design
          DataMapper instead o...
Doctrine 2

          Separation of DBAL and ORM
          Less Magic, More Explicit Design
          DataMapper instead o...
Doctrine 2

          Separation of DBAL and ORM
          Less Magic, More Explicit Design
          DataMapper instead o...
Wednesday, 8:30, Room Salon 1
      Guilherme on Doctrine 2!




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spr...
Doctrine 2 DBAL
          PDO API (ezcDatabase)




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring 2010   51...
Doctrine 2 DBAL
          PDO API (ezcDatabase)
          Currently Support for MySql, PgSql,
          Oracle, Sqlite, IB...
Doctrine 2 DBAL
          PDO API (ezcDatabase)
          Currently Support for MySql, PgSql,
          Oracle, Sqlite, IB...
Doctrine 2 DBAL
          PDO API (ezcDatabase)
          Currently Support for MySql, PgSql,
          Oracle, Sqlite, IB...
Doctrine 2 DBAL
          PDO API (ezcDatabase)
          Currently Support for MySql, PgSql,
          Oracle, Sqlite, IB...
Doctrine 2 DBAL
          PDO API (ezcDatabase)
          Currently Support for MySql, PgSql,
          Oracle, Sqlite, IB...
Doctrine 2 DBAL Schema

          An OO-Approach to Database Schema




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   ...
Doctrine 2 DBAL Schema

          An OO-Approach to Database Schema
          Vendor independent abstraction of Tables,
  ...
Doctrine 2 DBAL Schema

          An OO-Approach to Database Schema
          Vendor independent abstraction of Tables,
  ...
Doctrine 2 DBAL Schema

          An OO-Approach to Database Schema
          Vendor independent abstraction of Tables,
  ...
Doctrine 2 DBAL Schema

          An OO-Approach to Database Schema
          Vendor independent abstraction of Tables,
  ...
ZF 2 with Doctrine DBAL 2

          First class support?




Eberlei (direkt effekt GmbH)   ZF and Doctrine 1   IPC Spring...
ZF 2 with Doctrine DBAL 2

          First class support?
          Doctrine 2 DBAL API compatible with
          Zend Db?...
ZF 2 with Doctrine DBAL 2

          First class support?
          Doctrine 2 DBAL API compatible with
          Zend Db?...
ZF 2 with Doctrine DBAL 2

          First class support?
          Doctrine 2 DBAL API compatible with
          Zend Db?...
ZF 2 with Doctrine DBAL 2

          First class support?
          Doctrine 2 DBAL API compatible with
          Zend Db?...
Questions?




Eberlei (direkt effekt GmbH)     ZF and Doctrine 1   IPC Spring 2010   54 / 55
Thank You!
                Please rate this talk on joind.in:
                     http://joind.in/1710
                  ...
Upcoming SlideShare
Loading in …5
×

Just Married: Zend Framework and Doctrine

8,159 views

Published on

Zend Framework and Doctrine 1 are bundled in many applications although no formal integration between both existed up to now. This talk shows how we integrated both Doctrines as a possible modelling layer for the latest Zend Framework release and merged together the combined wisdom of both communities. An in-depth preview of Doctrine 2 and ZF integration completes the topic of this talk.

Published in: Technology, Education
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,159
On SlideShare
0
From Embeds
0
Number of Embeds
66
Actions
Shares
0
Downloads
156
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Just Married: Zend Framework and Doctrine

  1. 1. Just married: Zend Framework and Doctrine Benjamin Eberlei direkt effekt GmbH IPC Spring 2010 Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 1 / 55
  2. 2. About Me Benjamin Eberlei direkt effekt GmBH (digital marketing) Open Source contributor (Zend Framework and Doctrine) Twitter @beberlei Blog: www.whitewashing.de Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 2 / 55
  3. 3. And You? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 3 / 55
  4. 4. Model vs Persistence Model = Your code Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 4 / 55
  5. 5. Model vs Persistence Persistence = Framework Code Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 5 / 55
  6. 6. Model vs Persistence Model = Your code Persistence = Framework Code You can implement the same business logic using any persistence solution out there! Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 6 / 55
  7. 7. Zend Framework Persistence Zend Db - Abstraction Layer Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 7 / 55
  8. 8. Zend Framework Persistence Zend Db - Abstraction Layer Zend Db Select - SQL Query Object Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 7 / 55
  9. 9. Zend Framework Persistence Zend Db - Abstraction Layer Zend Db Select - SQL Query Object Zend Db Table - Table/Row Data Gateway pattern Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 7 / 55
  10. 10. Zend Framework Persistence Zend Db - Abstraction Layer Zend Db Select - SQL Query Object Zend Db Table - Table/Row Data Gateway pattern No Object-Relational Mapping Support! Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 7 / 55
  11. 11. Doctrine 1 Object-Relational Mapping, Active Record Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 8 / 55
  12. 12. Doctrine 1 Object-Relational Mapping, Active Record Doctrine Query Language Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 8 / 55
  13. 13. Doctrine 1 Object-Relational Mapping, Active Record Doctrine Query Language Hydrators Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 8 / 55
  14. 14. Doctrine 1 Object-Relational Mapping, Active Record Doctrine Query Language Hydrators Database Migrations Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 8 / 55
  15. 15. Doctrine Modelling Workflow 1. Setup Doctrine Bootstrap Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 9 / 55
  16. 16. Doctrine Modelling Workflow 1. Setup Doctrine Bootstrap 2. Define a YAML Schema Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 9 / 55
  17. 17. Doctrine Modelling Workflow 1. Setup Doctrine Bootstrap 2. Define a YAML Schema 3. Generate Model and Table PHP classes Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 9 / 55
  18. 18. Doctrine Modelling Workflow 1. Setup Doctrine Bootstrap 2. Define a YAML Schema 3. Generate Model and Table PHP classes 4. Generate Database Schema from Models Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 9 / 55
  19. 19. Doctrine Modelling Workflow 1. Setup Doctrine Bootstrap 2. Define a YAML Schema 3. Generate Model and Table PHP classes 4. Generate Database Schema from Models 5. Repeat (2)-(4) for Iterations of your models. Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 9 / 55
  20. 20. Doctrine Modelling Workflow 1. Setup Doctrine Bootstrap 2. Define a YAML Schema 3. Generate Model and Table PHP classes 4. Generate Database Schema from Models 5. Repeat (2)-(4) for Iterations of your models. 6. In production, use migrations for schema evolvement. Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 9 / 55
  21. 21. A Doctrine Project Layout Non-PEAR Structure Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 10 / 55
  22. 22. A Doctrine Project Layout Non-PEAR Structure No Module Prefixes Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 10 / 55
  23. 23. A Doctrine Project Layout Non-PEAR Structure No Module Prefixes Autoloading? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 10 / 55
  24. 24. A Doctrine Project Layout Non-PEAR Structure No Module Prefixes Autoloading? Configurable (PEAR).. Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 10 / 55
  25. 25. A Doctrine Project Layout Non-PEAR Structure No Module Prefixes Autoloading? Configurable (PEAR).. ..Not enough for ZF! Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 10 / 55
  26. 26. Zend Framework Projects Model * in models/ Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 11 / 55
  27. 27. Zend Framework Projects Model * in models/ Single Module Project Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 11 / 55
  28. 28. Zend Framework Projects Model * in models/ Single Module Project Not PEAR Standard Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 11 / 55
  29. 29. Zend Framework Projects Model * in models/ Single Module Project Not PEAR Standard Special Autoloader Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 11 / 55
  30. 30. Modular ZF Project Each Module has models/ Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 12 / 55
  31. 31. Modular ZF Project Each Module has models/ Again Special Autoloader Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 12 / 55
  32. 32. ZF + Doctrine Integration Not a ZF Component Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 13 / 55
  33. 33. ZF + Doctrine Integration Not a ZF Component Download: http://github.com/beberlei/zf-doctrine Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 13 / 55
  34. 34. ZF + Doctrine Integration Not a ZF Component Download: http://github.com/beberlei/zf-doctrine One Goal: No code-generation Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 13 / 55
  35. 35. ZF + Doctrine Integration Not a ZF Component Download: http://github.com/beberlei/zf-doctrine One Goal: No code-generation Includes: 1. Zend Application Resource Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 13 / 55
  36. 36. ZF + Doctrine Integration Not a ZF Component Download: http://github.com/beberlei/zf-doctrine One Goal: No code-generation Includes: 1. Zend Application Resource 2. Zend Tool Integration Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 13 / 55
  37. 37. ZF + Doctrine Integration Not a ZF Component Download: http://github.com/beberlei/zf-doctrine One Goal: No code-generation Includes: 1. Zend Application Resource 2. Zend Tool Integration 3. Zend Forms from Doctrine Metadata Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 13 / 55
  38. 38. ZF + Doctrine Integration Not a ZF Component Download: http://github.com/beberlei/zf-doctrine One Goal: No code-generation Includes: 1. Zend Application Resource 2. Zend Tool Integration 3. Zend Forms from Doctrine Metadata 4. Paginator Adapter Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 13 / 55
  39. 39. ZF + Doctrine Integration Not a ZF Component Download: http://github.com/beberlei/zf-doctrine One Goal: No code-generation Includes: 1. Zend Application Resource 2. Zend Tool Integration 3. Zend Forms from Doctrine Metadata 4. Paginator Adapter 5. Model List View Helper Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 13 / 55
  40. 40. Zend Application Resource 1. Install using Zend Tool: zf create project forum zf create-project doctrine –dsn=$DSN Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 14 / 55
  41. 41. Zend Application Resource 2. Register manually with Zend Application resources . doctrine . connections . default . dsn = " " pluginpaths . Z F D o c t r i n e _ A p p l i c a t i o n _ R e s o u r c e = " ZFDoctrine / Application / Resource " a u toloade r n a m e s p a c e s [] = " Doctrine " a u toloade r n a m e s p a c e s [] = " ZFDoctrine . Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 15 / 55
  42. 42. Configuring the Application Resource Configuring Connection DSN resources . doctrine . connections . < name >. dsn Configuring Connection Attributes resources . doctrine . connections . < name >. attributes Configuring Manager Attributes resources . doctrine . manager . attributes Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 16 / 55
  43. 43. ZFDoctrine Conventions Both ZF 1 and Doctrine 1 are magic boxes Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 17 / 55
  44. 44. ZFDoctrine Conventions Both ZF 1 and Doctrine 1 are magic boxes Enforcing Conventions Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 17 / 55
  45. 45. ZFDoctrine Conventions Both ZF 1 and Doctrine 1 are magic boxes Enforcing Conventions Model Classes: $Module Model $Name: 1. Default Model User 2. Default Model Group 3. Forum Model Thread 4. Forum Model Board Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 17 / 55
  46. 46. ZFDoctrine Conventions Both ZF 1 and Doctrine 1 are magic boxes Enforcing Conventions Model Classes: $Module Model $Name: 1. Default Model User 2. Default Model Group 3. Forum Model Thread 4. Forum Model Board Define Metadata Attributes refClass, local, model and foreign explicitly Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 17 / 55
  47. 47. A Doctrine Project zf create project forum zf create-project doctrine –dsn Creating four essential Doctrine Directories: application/configs/schema application/configs/fixtures application/configs/migrations application/configs/sql Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 18 / 55
  48. 48. Example Yaml schema: Forum Put a forum.yml in the schema directory: F o rum_Mod e l _ C a t e g o r y : columns : name : string (50) description : string (99999) Forum_Mode l_Boar d : columns : category_id : integer (10) name : string (100) description : string (5000) relations : Category : class : F o r u m _ Model_Category local : category_id foreign : id Threads : class : Fo ru m_ Model_Thread local : id foreign : board_id Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 19 / 55
  49. 49. Generate Models from Yaml zf generate-models-from-yaml doctrine Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 20 / 55
  50. 50. Generate Models from Yaml zf generate-models-from-yaml doctrine Generate Table Classes (application.ini) resources . doctrine . generateModels . generateTableClasses = true Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 20 / 55
  51. 51. Generate Models Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 21 / 55
  52. 52. Generate Models Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 22 / 55
  53. 53. Generated Model Classes Records Base Records Tables Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 23 / 55
  54. 54. Code Generation? Doctrine creates Models from Yaml files. Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 24 / 55
  55. 55. Code Generation? Doctrine creates Models from Yaml files. ...optionally(!) Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 24 / 55
  56. 56. Code Generation? Doctrine creates Models from Yaml files. ...optionally(!) You can skip Yaml and directly code the Model (Records and Tables) Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 24 / 55
  57. 57. Code Generation? Doctrine creates Models from Yaml files. ...optionally(!) You can skip Yaml and directly code the Model (Records and Tables) Zend Framework Project Support works without Yaml. Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 24 / 55
  58. 58. Generated Record: class For u m _ M o de l _ C ategory extends Forum_Model_Base_Category { } Generated Table: class F o r u m _ M o d e l _ C a t e g o r y T a b le extends Doctrine_Table { public static function getInstance () { return Doctrine_Core :: getTable ( ’ F o r u m _ Model_Category ’) ; } } Generated Base Record: Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 25 / 55
  59. 59. abstract class F o r u m _ M o d e l _ B a s e _ C a t e g o r y extends Doctrine_Record { public function setTableDefinition () { $this - > setTableName ( ’ forum_categories ’) ; $this - > hasColumn ( ’ name ’ , ’ string ’ , 50 , array ( ’ type ’ = > ’ string ’ , ’ length ’ = > ’ 50 ’ , )); $this - > hasColumn ( ’ description ’ , ’ string ’ , 99999 , array ( ’ type ’ = > ’ string ’ , ’ length ’ = > ’ 99999 ’ , )); } public function setUp () { parent :: setUp () ; $this - > hasMany ( ’ Forum_Model_Board ’ , array ( ’ local ’ = > ’ id ’ , ’ foreign ’ = > ’ category_id ’) ) ; } } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 26 / 55
  60. 60. Generating Database zf build-project doctrine –reload Drop and Create Database Create Tables Load Fixtures Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 27 / 55
  61. 61. Migrations Update your Database Schema: zf show-migration doctrine Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 28 / 55
  62. 62. Migrations Update your Database Schema: zf show-migration doctrine zf generate-migration doctrine Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 28 / 55
  63. 63. Migrations Update your Database Schema: zf show-migration doctrine zf generate-migration doctrine zf execute-migration doctrine Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 28 / 55
  64. 64. Forms for Doctrine Models Using Doctrine Metadata for other, non ORM purposes Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 29 / 55
  65. 65. Forms for Doctrine Models Using Doctrine Metadata for other, non ORM purposes Configuration of Zend Form instances Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 29 / 55
  66. 66. Forms for Doctrine Models Using Doctrine Metadata for other, non ORM purposes Configuration of Zend Form instances Mostly for backend (scaffolding) purposes Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 29 / 55
  67. 67. A Simple Form $form = new Z F D o c t r i ne_Fr om_M odel ( array ( ’ model ’ = > ’ F o r um_Model_Category ’ , ’ action ’ = > ’. ’ , ’ method ’ = > ’ post ’ )); Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 30 / 55
  68. 68. A Simple Form: Tweaking $form = new Z F D o c t r i ne_Fo rm_M odel ( array ( ’ model ’ = > ’ F o r um_Model_Category ’ , ’ method ’ = > ’ post ’ , ’ action ’ = > $this - > _helper - > url ( ’add - category ’ , ’ admin ’) , ’ fieldLabels ’ = > array ( ’ name ’ = > ’ Name ’ , ’ description ’ = > ’ Description ’ , ), ’ fieldTypes ’ = > array ( ’ description ’ = > ’ textarea ’ , ), )); Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 31 / 55
  69. 69. A Simple Form: Tweaking Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 32 / 55
  70. 70. A Simple Form: Controller public function add CategoryAction () { $form = $this - > createCategoryForm () ; $request = $this - > getRequest () ; $post = $request - > getPost () ; if ( $request - > isPost () && $form - > isValid ( $post ) ) { $form - > save () ; $this - > _helper - > redirector ( ’ success ’ , ’ admin ’) ; } $this - > view - > form = $form ; } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 33 / 55
  71. 71. A Simple Form: Updating public function e di tCategoryAction () { $categoryId = $this - > _getParam ( ’ id ’) ; $form = $this - > createCategoryForm () ; $request = $this - > getRequest () ; $post = $request - > getPost () ; $table = Doctrine :: getTable ( ’ Forum_Model_Category ’) ; $category = $table - > find ( $categoryId ) ; $form - > setRecord ( $category ) ; if ( $request - > isPost () && $form - > isValid ( $post ) ) { $form - > save () ; $this - > _helper - > redirector ( ’ success ’ , ’ admin ’) ; } $this - > view - > form = $form ; } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 34 / 55
  72. 72. A Simple Form: Action Helper public function add CategoryAction () { $form = $this - > createCategoryForm () ; $this - > _helper - > modelForm ( $form , ’ success ’) ; } public function e di tCategoryAction () { $form = $this - > createCategoryForm () ; $this - > getHelper ( ’ modelForm ’) -> setRecordIdParam ( ’ id ’) -> handleForm ( $form , ’ success ’) ; } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 35 / 55
  73. 73. Advanced Forms: Relations Relations rendered as (multi-)select fields: public function addBoardAction () { $form = new Z F D o ctri ne_Fo rm_M odel ( array ( ’ model ’ = > ’ Forum_Model_Board ’ , )); $this - > _helper - > modelForm ( $form , " success " ) ; } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 36 / 55
  74. 74. Advanced Forms: Relations Relations rendered as (multi-)select fields: public function addBoardAction () { $form = new Z F D o ctri ne_Fo rm_M odel ( array ( ’ model ’ = > ’ Forum_Model_Board ’ , )); $this - > _helper - > modelForm ( $form , " success " ) ; } Control Option Labels: class For u m _ M o del _ C a tegory extends ... { public function __toString () { return $this - > id . " , " . $this - > name ; } } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 36 / 55
  75. 75. Advanced Forms: Relations Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 37 / 55
  76. 76. Advanced Forms: Hooks Add Validators and Filters Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 38 / 55
  77. 77. Advanced Forms: Hooks Add Validators and Filters Change Decorators Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 38 / 55
  78. 78. Advanced Forms: Hooks Add Validators and Filters Change Decorators Use jQuery or Dojo Integration Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 38 / 55
  79. 79. Advanced Forms: Hooks Add Validators and Filters Change Decorators Use jQuery or Dojo Integration Hook methods: preGenerate() and postGenerate() Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 38 / 55
  80. 80. Advanced Forms: Hooks Adding decorators in preGenerate(): class Forum _Form_T hread extends ZFDo ctrin e_Fo rm_Mo del { protected function _preGenerate () { // called before the form is generated $decorators = array ( ’ FormElements ’ , array ( array ( ’ data ’= > ’ HtmlTag ’) , array ( ’ tag ’= > ’ table ’) ) , ’ Form ’ ); $this - > setDecorators ( $decorators ) ; } } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 39 / 55
  81. 81. Advanced Forms: Hooks jQuery or Dojo Enable a Form: class Forum _Form_T hread extends ZFDo ctrin e_Fo rm_Mo del { protected function _preGenerate () { ZendX_JQuery :: enableForm ( $this ) ; // Zend_Dojo :: enableForm ( $this ) ; } } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 40 / 55
  82. 82. Advanced Forms: Hooks Adding a validator in postGenerate(): class Forum _Form_T hread extends ZFDo ctrin e_Fo rm_Mo del { protected function _postGenerate () { // called after the form is generated $validator = new Z e n d _ V a l i d a t e _ S t r i n g L e n g t h ( array ( ’ min ’ = > 5 , ’ max ’ = > 255) ); $this - > getElement ( ’ title ’) -> addValidator ( $validator ) ; } } Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 41 / 55
  83. 83. Paginator Adapter Paginate a Doctrine Query: $query = Doctrine_Query :: create () ; // $query ... $adapter = new Z F D o c t r i n e _ P a g i n a t o r _ A d a p t e r _ D o c t r i n e Q u e r y ( $query ) ; $paginator = new Zend_Paginator ( $adapter ) ; Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 42 / 55
  84. 84. Paginator Adapter Paginate a Doctrine Query: $query = Doctrine_Query :: create () ; // $query ... $adapter = new Z F D o c t r i n e _ P a g i n a t o r _ A d a p t e r _ D o c t r i n e Q u e r y ( $query ) ; $paginator = new Zend_Paginator ( $adapter ) ; Paginate a Doctrine Table: $table = Doctrine_Core :: getTable ( ’ MyModel ’) ; $query = $table - > createQuery () ; Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 42 / 55
  85. 85. Model List View Helper Creates a paginated list for a model Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 43 / 55
  86. 86. Model List View Helper Creates a paginated list for a model Links to CRUD actions Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 43 / 55
  87. 87. Model List View Helper Creates a paginated list for a model Links to CRUD actions Reasonable default Look & Feel Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 43 / 55
  88. 88. Model List View Helper Creates a paginated list for a model Links to CRUD actions Reasonable default Look & Feel But offers full customization Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 43 / 55
  89. 89. Model List View Helper <h1 > Boards </ h1 > <?= $this - > modelList ( ’ Forum_Model_Board ’) ; ? > Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 44 / 55
  90. 90. Model List View Helper <h1 > Boards </ h1 > <?= $this - > modelList ( ’ Forum_Model_Board ’) ; ? > <h1 > Boards </ h1 > <?= $this - > modelList ( ’ Forum_Model_Board ’ , array ( ’ editRecordAction ’ = > ’ edit - board ’ , ’ addRecordAction ’ = > ’add - board ’ , ’ fieldLabels ’ = > array ( ’ id ’ = > ’ ID ’ , ’ category_id ’ = > ’ Category ’ , ’ name ’ = > ’ Name ’ , ’ description ’ = > ’ Description ’ , ) )); ?> Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 44 / 55
  91. 91. Model List View Helper Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 45 / 55
  92. 92. Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 46 / 55
  93. 93. Questions? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 47 / 55
  94. 94. Zend Framework 2.0 Currently Conversion to Namespaces Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 48 / 55
  95. 95. Zend Framework 2.0 Currently Conversion to Namespaces Specified Goals: 1. Ease the learning curve 2. Make extending the framework trivially simple 3. Simplify 4. Favor the explicit over the magical Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 48 / 55
  96. 96. Zend Framework 2.0 Currently Conversion to Namespaces Specified Goals: 1. Ease the learning curve 2. Make extending the framework trivially simple 3. Simplify 4. Favor the explicit over the magical ETA Q4/2010 or Q1/2011 Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 48 / 55
  97. 97. Doctrine 2 Separation of DBAL and ORM Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 49 / 55
  98. 98. Doctrine 2 Separation of DBAL and ORM Less Magic, More Explicit Design Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 49 / 55
  99. 99. Doctrine 2 Separation of DBAL and ORM Less Magic, More Explicit Design DataMapper instead of ActiveRecord Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 49 / 55
  100. 100. Doctrine 2 Separation of DBAL and ORM Less Magic, More Explicit Design DataMapper instead of ActiveRecord Powerful Metadata Mapping Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 49 / 55
  101. 101. Doctrine 2 Separation of DBAL and ORM Less Magic, More Explicit Design DataMapper instead of ActiveRecord Powerful Metadata Mapping Considerable Performance Improvements Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 49 / 55
  102. 102. Doctrine 2 Separation of DBAL and ORM Less Magic, More Explicit Design DataMapper instead of ActiveRecord Powerful Metadata Mapping Considerable Performance Improvements Currently Beta 1, Release on September 1st Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 49 / 55
  103. 103. Doctrine 2 Separation of DBAL and ORM Less Magic, More Explicit Design DataMapper instead of ActiveRecord Powerful Metadata Mapping Considerable Performance Improvements Currently Beta 1, Release on September 1st First class citizen in Symfony 2 Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 49 / 55
  104. 104. Wednesday, 8:30, Room Salon 1 Guilherme on Doctrine 2! Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 50 / 55
  105. 105. Doctrine 2 DBAL PDO API (ezcDatabase) Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 51 / 55
  106. 106. Doctrine 2 DBAL PDO API (ezcDatabase) Currently Support for MySql, PgSql, Oracle, Sqlite, IBM and PDO Db2 Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 51 / 55
  107. 107. Doctrine 2 DBAL PDO API (ezcDatabase) Currently Support for MySql, PgSql, Oracle, Sqlite, IBM and PDO Db2 SqlSrv (+PDO) under development Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 51 / 55
  108. 108. Doctrine 2 DBAL PDO API (ezcDatabase) Currently Support for MySql, PgSql, Oracle, Sqlite, IBM and PDO Db2 SqlSrv (+PDO) under development Lots of Convenience Methods (Zend Db) Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 51 / 55
  109. 109. Doctrine 2 DBAL PDO API (ezcDatabase) Currently Support for MySql, PgSql, Oracle, Sqlite, IBM and PDO Db2 SqlSrv (+PDO) under development Lots of Convenience Methods (Zend Db) Currently planned: A Query Object (Zend Db Select, ezcDatabaseQuery) Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 51 / 55
  110. 110. Doctrine 2 DBAL PDO API (ezcDatabase) Currently Support for MySql, PgSql, Oracle, Sqlite, IBM and PDO Db2 SqlSrv (+PDO) under development Lots of Convenience Methods (Zend Db) Currently planned: A Query Object (Zend Db Select, ezcDatabaseQuery) SQL DDL and Data-QL abstraction (PEAR MDB2 and ezcDatabaseSchema) Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 51 / 55
  111. 111. Doctrine 2 DBAL Schema An OO-Approach to Database Schema Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 52 / 55
  112. 112. Doctrine 2 DBAL Schema An OO-Approach to Database Schema Vendor independent abstraction of Tables, Indexes, ForeignKeys and Sequences Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 52 / 55
  113. 113. Doctrine 2 DBAL Schema An OO-Approach to Database Schema Vendor independent abstraction of Tables, Indexes, ForeignKeys and Sequences Get required set-up or tear-down SQL Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 52 / 55
  114. 114. Doctrine 2 DBAL Schema An OO-Approach to Database Schema Vendor independent abstraction of Tables, Indexes, ForeignKeys and Sequences Get required set-up or tear-down SQL Get SQL to move from one to another schema Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 52 / 55
  115. 115. Doctrine 2 DBAL Schema An OO-Approach to Database Schema Vendor independent abstraction of Tables, Indexes, ForeignKeys and Sequences Get required set-up or tear-down SQL Get SQL to move from one to another schema Doctrine Migrations Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 52 / 55
  116. 116. ZF 2 with Doctrine DBAL 2 First class support? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 53 / 55
  117. 117. ZF 2 with Doctrine DBAL 2 First class support? Doctrine 2 DBAL API compatible with Zend Db? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 53 / 55
  118. 118. ZF 2 with Doctrine DBAL 2 First class support? Doctrine 2 DBAL API compatible with Zend Db? Zend Db Select drop-in replacement? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 53 / 55
  119. 119. ZF 2 with Doctrine DBAL 2 First class support? Doctrine 2 DBAL API compatible with Zend Db? Zend Db Select drop-in replacement? Table-, Row-Data-Gateway? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 53 / 55
  120. 120. ZF 2 with Doctrine DBAL 2 First class support? Doctrine 2 DBAL API compatible with Zend Db? Zend Db Select drop-in replacement? Table-, Row-Data-Gateway? ORM Integration? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 53 / 55
  121. 121. Questions? Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 54 / 55
  122. 122. Thank You! Please rate this talk on joind.in: http://joind.in/1710 Twitter: @beberlei Blog: http://www.whitewashing.de Eberlei (direkt effekt GmbH) ZF and Doctrine 1 IPC Spring 2010 55 / 55

×