소스 검색

[example] update example code and document steps

gedi 13 년 전
부모
커밋
a769e7b865
3개의 변경된 파일37개의 추가작업 그리고 20개의 파일을 삭제
  1. 2 0
      doc/annotations.md
  2. 5 0
      example/em.php
  3. 30 20
      example/run.php

+ 2 - 0
doc/annotations.md

@@ -67,6 +67,8 @@ New annotation reader does not depend on any namespaces, for that reason you can
 single reader instance for whole project. The example bellow shows how to setup the
 mapping and listeners:
 
+**Note:** using this repository you can test and check the [example demo configuration](https://github.com/l3pp4rd/DoctrineExtensions/blob/master/example/em.php)
+
 ``` php
 $reader = new \Doctrine\Common\Annotations\AnnotationReader();
 $annotationDriver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader);

+ 5 - 0
example/em.php

@@ -1,4 +1,9 @@
 <?php
+/**
+ * This entity manager configuration works with doctrine 2.1.x and 2.2.x
+ * versions. Regarding AnnotationDriver setup it most probably will be changed into
+ * xml. Because annotation driver fails to read other classes in same namespace
+ */
 // connection args, modify at will
 $connection = array(
     'host' => '127.0.0.1',

+ 30 - 20
example/run.php

@@ -1,5 +1,8 @@
 <?php
 
+use Doctrine\ORM\Query;
+use Gedmo\Translatable\TranslationListener;
+
 $executionStart = microtime(true);
 $memoryStart = memory_get_usage(true);
 
@@ -53,28 +56,35 @@ if (!$food) {
     $translatable->setTranslatableLocale('en');
 }
 
-// builds tree
-$build = function ($nodes) use (&$build, $repository) {
-    $result = '';
-    foreach ($nodes as $node) {
-        $result .= str_repeat("-", $node->getLevel())
-            . $node->getTitle()
-            . '('.$node->getSlug().')'
-            . PHP_EOL
-        ;
-        if ($repository->childCount($node, false)) {
-            $result .= $build($repository->children($node, true));
-        }
+// create query to fetch tree nodes
+$query = $em
+    ->createQueryBuilder()
+    ->select('node')
+    ->from('Entity\Category', 'node')
+    ->orderBy('node.root, node.lft', 'ASC')
+    ->getQuery()
+;
+// set hint to translate nodes
+$query->setHint(
+    Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER,
+    'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker'
+);
+$treeDecorationOptions = array(
+    'decorate' => true,
+    'rootOpen' => '',
+    'rootClose' => '',
+    'childOpen' => '',
+    'childClose' => '',
+    'nodeDecorator' => function($node) {
+        return str_repeat('-', $node['level']).$node['title'].PHP_EOL;
     }
-    return $result;
-};
-
-$nodes = $repository->getRootNodes();
-echo $build($nodes).PHP_EOL.PHP_EOL;
+);
+// build tree in english
+echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
 // change locale
-$translatable->setTranslatableLocale('lt');
-$nodes = $repository->getRootNodes(); // reload in diferent locale
-echo $build($nodes).PHP_EOL.PHP_EOL;
+$query->setHint(TranslationListener::HINT_TRANSLATABLE_LOCALE, 'lt');
+// build tree in lithuanian
+echo $repository->buildTree($query->getArrayResult(), $treeDecorationOptions).PHP_EOL.PHP_EOL;
 
 $ms = round(microtime(true) - $executionStart, 4) * 1000;
 $mem = round((memory_get_usage(true) - $memoryStart) / 1000000, 2);