Kdyby\Doctrine – změna výsledků mezi presenterem a latte šablonou

MichalHaltuf
Bronze Partner | 14
+
0
-

Ahoj,
už podruhé jsem narazil na záhadný problém, jehož původu se nemohu dopátrat.

Princip byl v obou případech stejný. V presenteru zavolám

public function actionDefault() {

	/** em je Kdyby\Doctrine\EntityManager */
	$var = $this->em->createQueryBuilder()->....->getQuery()->getResult();

	$this->template->var = $var;
}

S proměnnou $var pak už nic nedělám. Problém je, že v šabloně je její obsah úplně jiný, než v presenteru! Někde se po cestě jaksi magicky změní a já nevím proč.

Konkrétně když za předchozí kód dám v presenteru:

var_dump($var);

ukáže se

array(24) {
  [0] =>
  array(2) {
    [0] =>
    class App\Models\Location#199 (5) {
      protected $tours =>
      class Doctrine\ORM\PersistentCollection#216 (9) {
        ...
      }
      protected $country =>
      class App\Models\Country#220 (6) {
        ...
      }
      protected $area =>
      string(4) "Neum"
      protected $place =>
      string(4) "Neum"
      private $id =>
      string(1) "8"
    }
    'region_count' =>
    string(1) "1"
  }
  ...

tedy 24 výsledků, každý z nich pole o dvou klíčích, 0 a ‚region_count‘.

Když dám v latte šabloně {php var_dump($var);} tak už je to:

array(24) {
  [0] =>
  class App\Models\Location#199 (5) {
    protected $tours =>
    class Doctrine\ORM\PersistentCollection#216 (9) {
      private $snapshot =>
      array(0) {
        ...
      }
      private $owner =>
              ...

      private $association =>
      array(16) {
        ...
      }
      private $em =>
      class Kdyby\Doctrine\EntityManager#12 (14) {
        ...
      }
      private $backRefFieldName =>
      string(9) "locations"
      private $typeClass =>
      class Kdyby\Doctrine\Mapping\ClassMetadata#200 (41) {
        ...
      }
      private $isDirty =>
      bool(false)
      protected $collection =>
      class Doctrine\Common\Collections\ArrayCollection#217 (1) {
        ...
      }
      protected $initialized =>
      bool(false)
    }
    protected $country =>
    class App\Models\Country#220 (6) {
      protected $code =>
      string(3) "BIH"
      protected $name =>
      string(19) "Bosna a Hercegovina"
      protected $url =>
      string(19) "bosna-a-hercegovina"
      protected $weather =>
      string(0) ""
      protected $active =>
      bool(true)
      private $id =>
      string(2) "24"
    }
    protected $area =>
    string(4) "Neum"
    protected $place =>
    string(4) "Neum"
    private $id =>
    string(1) "8"
  }
...

Tedy někam se mi záhadně ztratil u každého výsledku klíč ‚region_count‘. Používám Nette ^2.4, php 7.1, kdyby/doctrine ^3.2

David Matějka
Moderator | 6445
+
0
-

to se mi nejak nezda. kdyz dumpnes treba v afterRender promennou $this->template->var tak je to jeste OK?

zkousel si tu promennou prejmenovat, jestli tam nekde neni kolize?

MichalHaltuf
Bronze Partner | 14
+
0
-

Proměnná se jmenuje ve skutečnosti $used_countries, pochybuji, že by tam byla nějaká kolize :-) Ale přejmenování nepomáhá.

Dump v afterRender() ukazuje původní správnou verzi.

Editoval MichalHaltuf (12. 12. 2017 17:39)

MichalHaltuf
Bronze Partner | 14
+
0
-

Problém byl samozřejmě na mé straně.
Omlouvám se za vyrušení.