Ver Fonte

[example] update example code and document steps

gedi há 13 anos atrás
pai
commit
a769e7b865
3 ficheiros alterados com 37 adições e 20 exclusões
  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);