Aus dem "Simple Example" aus dem Symfony-Book (v.2.2) kann man auch einfach eine CRUD-Anwendung erstellen. Im Lauf der Installation (s.Buch) muß man folgende Befehle ausführen: # Bundle erstellen php
Aus dem "Simple Example" aus dem Symfony-Book (v.2.2) kann man auch einfach eine CRUD-Anwendung erstellen. Im Lauf der Installation (s.Buch) muß man folgende Befehle ausführen:
# Bundle erstellen
php app/console generate:bundle --namespace=Acme/StoreBundle
# nachdem die Datenbankeinstellungen unter paramters.yml eingetragen sind, kann die DB erstellt werden:
php app/console doctrine:database:create
# nachdem die Entity erstellt wurde (Tabellen und Spalten-Infos in den Annotations),
# kann man sich getter- und setter-Methoden automatisiert ergänzen lassen:
php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product
# Dann läßt man die Tabelle erstellen:
php app/console doctrine:schema:update --force
# einfache Entities (hier z.b. nur 1 Spalte) kann man auch so erstellen lassen :
php app/console doctrine:generate:entity --entity="AcmeStoreBundle:Category" --fields="name:string(255)"
# auch die Tabelle category wird von Symfony erstellt:
php app/console doctrine:schema:update --force
# dieser Befehl erstellt eine komplette CRUD-App für die Tabelle product
php app/console doctrine:generate:crud --entity=AcmeStoreBundle:Product --format=annotation --with-write --no-interaction
# dieser Befehl erstellt eine komplette CRUD-App für die Tabelle Category
php app/console doctrine:generate:crud --entity=AcmeStoreBundle:Category --format=annotation --with-write --no-interaction
Dann muß noch das Routing erstellt werden unter Acme/StoreBundle/Resources/config/routing.yml:
AcmeStoreBundle: resource: "@AcmeStoreBundle/Controller/" type: annotation prefix: /store
Was nicht im Buch steht: das PHP5-Intl-Modul muß installiert sein (sudo apt-get install php5-intl) und die Entity-Klassen müssen eine __toString-Methode implementieren, sonst gibts beim Aufruf Fehler! Die kann in beiden Fällen so aussehen:
public function __toString()
{
return $this->name;
}
Danach will man die generierten Formulare noch verschönern. Um Twig dazu zu bekommen, das Stylesheet in Resources/public/css zu laden muß dieses erst nach web kopiert werden, das geht auch automatisiert mit:
php app/console assets:install
Im new.html.twig (oder auch im base.html.twig) dann folgenden Code einbauen:
{% block stylesheets %}
<link href="{{ asset('bundles/acmestore/css/form.css') }}" type="text/css" rel="stylesheet" />
{% endblock %}
Entity-Annotations müssen manchmal extra Escaped werden:
/**
* @var string
*
* @ORM\Column(name="`fulltext`", type="text", nullable=true)
*/
private $fulltext;
"Fulltext" ist ein reserved Word! So hieß die Tablespalte aber wirklich (Erbe von jos_content!). Der Crud-Generator hat die Annotation OHNE die Backticks erzeugt. Wenn diese aber weggelassen werden, kommt es zu einem undurchsichtigen SQL-Syntaxerror!