Procházet zdrojové kódy

[example] update example code and document steps

gedi před 13 roky
rodič
revize
a769e7b865
3 změnil soubory, kde provedl 37 přidání a 20 odebrání
  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);