Symfony Entwicklung unter OS X

Ich gehe davon aus das ihr MAMP installiert habt und (richtig) benutzt.

Um Symfony zu installieren und zu updaten benutzt man am besten Composer. Welches man auch gleich system weit installieren kann, weil es super angenehm ist damit Abhängigkeiten zu verwalten

Ich musste ersteinmal detect_unicode = Off an das Ende meiner php.ini schreiben und konnte dann Composer installieren.

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

So jetzt können wir eine Menge php Software mit einem cli Befehl installieren.

Dann fangen wir mit Symfony an

composer create-project symfony/framework-standard-edition nano-example/ 2.3.1

Jetzt lädt Composer die framework-standard-edition und alle Abhängigkeiten.

Jetzt rein ins Verzeichnis und die Requirements überprüfen.

cd nano-example
php app/check.php

Wenn alles OK ist, kann man mit der Entwicklung beginnen.

Da Symfony in Bundles strukturiert ist fangen wir an eins BlogBundle zu erstellen.

php app/console generate:bundle

daraufhin wird man nach einigen Parametern gefragt die zu erstellung notwendig sind.

Bundle namespace: Nano/Example/BlogBundle
Bundle name [NanoExampleBlogBundle]: 
Target directory [/Users/lassenielsen/Dropbox/nano/sites/nano-example/src]: 
Configuration format (yml, xml, php, or annotation): annotation
Do you want to generate the whole directory structure [no]? 
Do you confirm generation [yes]? 
Confirm automatic update of your Kernel [yes]? 
Confirm automatic update of the Routing [yes]?

Bis auf Bundle namespace und Configuration format können wir die Default-Werte behalten.

Was braucht man für einen Blog?
– Artikel
– Kommentare
– Tags

Datenbankschema:

Artikel(Titel, Inhalt, Erstellt am, Bearbeitet am, Veröffentlicht?)
Kommentare(Titel, Inhalt, Erstellt am, Autorname, Veröffentlicht?)
Tags(name)

auch das lässt sich wunderbar mit der Kommandozeile erledigen

php app/console generate:doctrine:entity
The Entity shortcut name: NanoExampleBlogBundle:Post
Configuration format (yml, xml, php, or annotation) [annotation]: 
New field name (press  to stop adding fields): title
Field type [string]: 
Field length [255]: 
New field name (press  to stop adding fields): content
Field type [string]: text
New field name (press  to stop adding fields): created
Field type [string]: datetime
New field name (press  to stop adding fields): updated
Field type [string]: datetime
New field name (press  to stop adding fields): published
Field type [string]: boolean
New field name (press  to stop adding fields): 
Do you want to generate an empty repository class [no]? 
Do you confirm generation [yes]?

php app/console generate:doctrine:entity
The Entity shortcut name: NanoExampleBlogBundle:Comment
Configuration format (yml, xml, php, or annotation) [annotation]: 
New field name (press  to stop adding fields): title
Field type [string]: 
Field length [255]: 
New field name (press  to stop adding fields): content
Field type [string]: text
New field name (press  to stop adding fields): created
Field type [string]: datetime
New field name (press  to stop adding fields): updated
Field type [string]: datetime
New field name (press  to stop adding fields): published
Field type [string]: boolean
New field name (press  to stop adding fields): author
Field type [string]: 
Field length [255]: 
New field name (press  to stop adding fields): 
Do you want to generate an empty repository class [no]? 
Do you confirm generation [yes]?

php app/console generate:doctrine:entity
The Entity shortcut name: NanoExampleBlogBundle:Tag
Configuration format (yml, xml, php, or annotation) [annotation]: 
New field name (press  to stop adding fields): name
Field type [string]: 
Field length [255]:
Do you want to generate an empty repository class [no]? 
Do you confirm generation [yes]?

Damit haben wir 3 Dateien generiert, z.B. sieht src/Nano/Example/BlogBundle/Entity/Tag.php jetzt so aus

id;
    }

    /**
     * Set name
     *
     * @param string $name
     * @return Tag
     */
    public function setName($name)
    {
        $this->name = $name;

        return $this;
    }

    /**
     * Get name
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }
}

Damit haben wir eine Entität, auf die wir mit $tag = new Tag(); zugreifen können.

Jetzt möchten wir noch die Beziehungen zwischen den drei Entitäten herstellen.
In Doctrine geht das ganz einfach mit Kommentaren über einer Variable

#Beziehung Post->Comments
//src/Nano/Example/BlogBundle/Entity/Post.php 
/**
* @ORMOneToMany(targetEntity="Comment", mappedBy="post")
**/
protected $comments;

//src/Nano/Example/BlogBundle/Entity/Comment.php 
/**
* @ORMManyToOne(targetEntity="Post", inversedBy="comments")
*/
protected $post;

#Beziehung PostsTags
//src/Nano/Example/BlogBundle/Entity/Post.php 
/**
 * @ManyToMany(targetEntity="Tag", inversedBy="posts")
**/
protected $tags;

//src/Nano/Example/BlogBundle/Entity/Tag.php
/**
 * @ManyToMany(targetEntity="Post", mappedBy="tags")
**/
protected $posts;

Damit sind die Beziehungen eingepflegt und wir können uns die getter & setter generieren lassen.

php app/console generate:doctrine:entities Nano

Leave a Reply

Your email address will not be published. Required fields are marked *