Symfony 2 Tutorial Neues Bundle erstellen: php app/console generate:bundle --namespace=blogger/blogbundle Eintrag erfolgt in app/appkernel.php und app/config/routing.yml. Model Available types: array, object, boolean, integer, smallint, bigint, string, text, datetime, datetimetz, date, time, decimal, float. php app/console doctrine:generate:entity --entity="bloggerblogbundle:post" -- fields="category_id:integer title:string(255) content:text created_at:datetime updated_at:datetime" php app/console doctrine:generate:entity --entity="bloggerblogbundle:tag" -- fields="name:string(255) created_at:datetime" php app/console doctrine:generate:entity --entity="bloggerblogbundle:category" -- fields="name:string(255) created_at:datetime"
Relations Post: src/blogger/blogbundle/entity/post.php use Doctrine\Common\Collections\ArrayCollection; @ORM\Entity @ORM\Table(name="post") @ORM\Entity(repositoryClass="Blogger\BlogBundle\Entity\PostRepository") @ORM\HasLifecycleCallbacks @ORM\ManyToOne(targetEntity="Category") @ORM\JoinColumn(name="category_id", referencedcolumnname="id") @var Category $category protected $category; @ORM\ManyToMany(targetEntity="Tag") @ORM\JoinTable(name="post_tag", joincolumns=@orm\joincolumn(name="post_id", referencedcolumnname="id"), inversejoincolumns=@orm\joincolumn(name="tag_id", referencedcolumnname="id") ) @var ArrayCollection $tags protected $tags; Constructs a new instance of Post. public function construct() $this->created_at = $this->updated_at = new \DateTime("now"); $this->tags = new ArrayCollection(); Invoked before the entity is updated. @ORM\PreUpdate public function preupdate() $this->updated_at = new \DateTime("now");
Category: src/blogger/blogbundle/entity/category.php use Doctrine\Common\Collections\ArrayCollection; Blogger\BlogBundle\Entity\Category @ORM\Table(name="category") @ORM\Entity(repositoryClass="Blogger\BlogBundle\Entity\CategoryRepository") @ORM\OneToMany(targetEntity="Post", mappedby="category") @var ArrayCollection $posts protected $posts; public function construct() $this->posts = new ArrayCollection(); $this->created_at = new \DateTime("now"); public function tostring() return $this->name; Tag: src/blogger/blogbundle/entity/tag.php use Doctrine\Common\Collections\ArrayCollection; Blogger\BlogBundle\Entity\Tag @ORM\Table(name="tag") @ORM\Entity(repositoryClass="Blogger\BlogBundle\Entity\TagRepository") @ORM\ManyToMany(targetEntity="Post", mappedby="tags") @var ArrayCollection $posts protected $posts; public function construct() $this->posts = new ArrayCollection(); $this->created_at = new \DateTime("now"); public function tostring() return $this->name;
Generating Getters and Setters php app/console doctrine:generate:entities Blogger Creating the Database Tables/Schema php app/console doctrine:schema:update force CRUD creation: php app/console generate:doctrine:crud BloggerBlogBundle:Post BloggerBlogBundle:Category BloggerBlogBundle:Tag Formulare ausmisten (unnötige Felder entfernen) src/blogger/blogbundle/form/
Templating src/blogger/blogbundle/resources/views/default/layout.html.twig <!DOCTYPE HTML> <html> <head> % set bundlepath = 'bundles/bloggerblog/' % <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>symfony2 tutorial</title> % block stylesheets % <link href=" asset( bundlepath ~ 'css/main.css') " type="text/css" rel="stylesheet" /> % endblock % % block javascripts % <script src=" asset( bundlepath ~ 'js/jquery-1.7.1.min.js') " type="text/javascript"></script> <script src=" asset( bundlepath ~ 'js/main.js') " type="text/javascript"></script> % endblock % </head> <body> <div id="wrapper"> <div id="header"> <h1>tutorial</h1> <ul> <li><a href=" path('post') ">Posts verwalten</a></li> <li><a href=" path('category') ">Kategorien verwalten</a></li> <li><a href=" path('tag') ">Tags verwalten</a></li> </ul> </div> <div id="page-body"> % block body %% endblock % </div> <div id="footer"> % include 'BloggerBlogBundle:Default:footer.html.twig' % </div> </div> </body> </html> src/blogger/blogbundle/resources/views/default/footer.html.twig <p>das ist der Footer</p>
src/blogger/blogbundle/resources/views/category/index.html.twig % extends 'BloggerBlogBundle:Default:layout.html.twig' % % block javascripts % parent() <script src=" asset( bundlepath ~ 'js/xxxxxx.js') " type="text/javascript"></script> % endblock % % block body %... % endblock % Install assets php app/console assets:install web
Using relations src/blogger/blogbundle/resources/views/post/index.html.twig <th>categoryname</th> <td> entity.getcategory </td> <tr class= taglist > <td colspan="8"> Tags: % for tag in entity.gettags % <a href=" path('tag_show', 'id': tag.id ) "> tag.name </a> % endfor % </td> </tr> src/blogger/blogbundle/resources/views/tag/show.html.twig <h2>posts mit dem Tag entity.name </h2> <table class="tagposts"> <tr> <th>id</th> <th>post title</th> </tr> % for post in entity.getposts % <tr> <td> post.id </td> <td><a href=" path('post_show', 'id': post.id ) "> post.title </a></td> </tr> % endfor % </table> src/blogger/blogbundle/resources/views/category/show.html.twig <h2>posts mit der Katgorie entity.name </h2> <table class="categoryposts"> <tr> <th>id</th> <th>post title</th> </tr> % for post in entity.getposts % <tr> <td> post.id </td> <td><a href=" path('post_show', 'id': post.id ) "> post.title </a></td> </tr> % endfor % </table>
String Translation app/config/config.yml framework: #esi: ~ translator: fallback: de @Route("/") @Template() public function rootaction() $request = $this->getrequest(); $session = $request->getsession(); $lang = $this->getrequest()->getpreferredlanguage(array('de','en')); $session->setlocale($lang); return $this->redirect($this->generateurl('index')); @Route("_locale/index/", name="index", requirements="_locale"="de en") @Method("GET") @Template() public function indexaction() echo $this->get('translator')->trans('willkommen'); return array(); src/blogger/blogbundle/resources/views/default/index.html.twig % extends 'BloggerBlogBundle:Default:layout.html.twig' % % block body % % trans %Willkommen% endtrans % % endblock % src/blogger/blogbundle/resources/translations/messages.en.php <?php return array( 'Willkommen' => 'Welcome' );?> Parameter use Symfony\Component\HttpFoundation\Response; @Route("/parameter/id/id2", name="parameter", requirements="id" = "\d+", defaults="id2" = "kein wert") @Method("GET") @Template() public function parameteraction($id, $id2) return new Response('Parameter1: '.$id. ' Parameter2: '.$id2);
Minify JavaScripts and Stylesheets with YUI Compressor apt-get install yui-compressor src/blogger/blogbundle/resources/views/default/layout.html.twig % stylesheets '@BloggerBlogBundle/Resources/public/css/' output='css/compressed.css' filter='?yui_css' % <link rel="stylesheet" href=" asset_url " type="text/css" media="screen" /> % endstylesheets % % javascripts '@BloggerBlogBundle/Resources/public/js/' output='js/compressed.js' filter='?yui_js' % <script src=" asset_url "></script> % endjavascripts % Also in dev mode filter='yui_css' filter='yui_js' app/config/config.yml # Assetic Configuration assetic: debug: "%kernel.debug%" use_controller: false # Uncomment the following line if your java bin is # in a different location # java: /usr/bin/java filters: cssrewrite: ~ yui_css: jar: /usr/share/yui-compressor/yui-compressor.jar yui_js: jar: /usr/share/yui-compressor/yui-compressor.jar php app/console --env=prod assetic:dump
Google Closure Compiler apt-get install sun-java6-jdk sun-java6-plugin update-java-alternatives -s java-6-sun Once either one is done, run the sudo update-java-alternatives -s java-6-sun command and finally add the line /usr/lib/jvm/java-6-sun to the top of the /etc/jvm file (gksudo gedit /etc/jvm). Save and exit. To test your Java(TM) setup in the terminal type:- mkdir /usr/share/closure-compiler cd /usr/share/closure-compiler wget http://closure-compiler.googlecode.com/files/compiler-latest.zip. unzip compiler-latest.zip src/blogger/blogbundle/resources/views/default/layout.html.twig % javascripts '@BloggerBlogBundle/Resources/public/js/' output='js/compressed.js' filter='closure' % <script src=" asset_url "></script> % endjavascripts % app/config/config.yml # Assetic Configuration assetic: debug: %kernel.debug% use_controller: false # java: /usr/bin/java filters: cssrewrite: ~ closure: jar: /usr/share/closure-compiler/compiler.jar php app/console --env=prod assetic:dump