Go to file
William DURAND 7cd70d9cb9 Type hints
2011-01-22 16:14:02 +01:00
Command Fix error with InputOption in BuildCommand definition 2011-01-21 19:36:24 +01:00
DependencyInjection Type hints 2011-01-22 16:14:02 +01:00
Logger added files 2010-10-28 14:41:03 +02:00
Resources/config added files 2010-10-28 14:41:03 +02:00
Tests added files 2010-10-28 14:41:03 +02:00
PropelBundle.php Removed a call to getPropelService() that is a protected method. 2011-01-21 19:37:43 +01:00
README added files 2010-10-28 14:41:03 +02:00

Propel Bundle
=============

This is a (work in progress) implementation of Propel in Symfony 2.

Currently supports:

 * Generation of model classes based on an XML schema (not YAML) placed under `BundleName/Resources/*schema.xml`.
 * Runtime autoloading of Propel and generated classes
 * Propel runtime initialization through the XML configuration.

Installation
------------

 * Checkout Propel and Phing in the src/vendor/ directory

    > cd sandbox/src/vendor
    > svn checkout http://svn.propelorm.org/branches/1.5 propel
    > svn checkout http://phing.mirror.svn.symfony-project.com/tags/2.3.3/classes/phing phing
    
Sample Configuration
--------------------

### Project configuration

    # in sandbox/hello/config/config.yml
    propel.config:
      path:       %kernel.root_dir%/../src/vendor/propel
      phing_path: %kernel.root_dir%/../src/vendor/phing

    propel.dbal:
      driver:               mysql
      user:                 root
      password:             null
      dsn:                  mysql:host=localhost;dbname=test
      options:              {}
    #  default_connection:       default
    #  connections:
    #    default:
    #      driver:               mysql
    #      user:                 root
    #      password:             null
    #      dsn:                  mysql:host=localhost;dbname=test
    #      options:              {}

### Sample Schema

Place the following schema in src/Application/HelloBundle/Resources/config/schema.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <database name="default" namespace="Application\HelloBundle\Model" defaultIdMethod="native">

      <table name="book">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
        <column name="title" type="varchar" primaryString="1" size="100" />
        <column name="ISBN" type="varchar" size="20" />
        <column name="author_id" type="integer" />
        <foreign-key foreignTable="author">
          <reference local="author_id" foreign="id" />
        </foreign-key>
      </table>

      <table name="author">
        <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
        <column name="first_name" type="varchar" size="100" />
        <column name="last_name" type="varchar" size="100" />
      </table>

    </database>

### Build Process

Call the application console with the `propel:build` task:

    > ./hello/console propel:build --classes

### Use The Model Classes 

Use the Model classes as any other class in Symfony. Just use the correct namespace, and Symfony will autoload them:

    class HelloController extends Controller
    {
      public function indexAction($name)
      {
        $author = new \Application\HelloBundle\Model\Author();
        $author->setFirstName($name);
        $author->save();

        return $this->render('HelloBundle:Hello:index', array('name' => $name, 'author' => $author));
      }
    }


Known Problems
--------------

Your application must not be in a path including dots in directory names (i.e. '/Users/me/symfony/2.0/sandbox/' fails).