Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [Symfony][SF3] Wywołanie magicznej methody __call

Napisany przez: kusiu 12.02.2018, 11:41:23

Zaimplementowalem https://github.com/KnpLabs/DoctrineBehaviors#translatable, natomiast methoda __call, ktora umiescilem w entity nie jest wykonywana:

  1. public function __call($method, $arguments)
  2. {
  3. return $this->proxyCurrentLocaleTranslation($method, $arguments);
  4. }


  1. Neither the property "name" nor one of the methods "getName()", "name()", "isName()", "hasName()", "__get()" exist and have public access in class "AppBundle\Entity\Occupation".


Co powinienem zrobic aby methoda __call nie byla ignorowana?

Napisany przez: nospor 12.02.2018, 11:50:13

czemu __call? Powininies zaimplementowac __get(). Nawet komunikat bledu ci to wyraznie mowi

Napisany przez: kusiu 12.02.2018, 12:15:31

Cytat(nospor @ 12.02.2018, 11:50:13 ) *
czemu __call? Powininies zaimplementowac __get(). Nawet komunikat bledu ci to wyraznie mowi


Spojrz na przyklad w dokumentacji https://github.com/KnpLabs/DoctrineBehaviors#translatable

Magiczna methoda __call przydaje sie gdy chce sie wyciagnac dane przez:

  1. $occupation = $this->getDoctrine()->getEntityManager()->getRepository(Occupation::class)->find(1);
  2. dump($occupation->getName());


Ten blad pojawia sie w przypadku odczytywania danych w formularzu. Czy nie lepiej bylo by nadpisac PropertyAccessor by sprawdzal tez funckcje __call?

Teoretycznie moglbym w entity miec zarowno __call ja i _get, jednak...

  1. public function __get($name)
  2. {
  3. $methodName = "get" . http://www.php.net/ucfirst($name);
  4. return $this->proxyCurrentLocaleTranslation($methodName, []);
  5. }
  6.  
  7. public function __call($method, $arguments)
  8. {
  9. return $this->proxyCurrentLocaleTranslation($method, $arguments);
  10. }

Napisany przez: nospor 12.02.2018, 12:23:54

Ja ci tylko mowie czego oczekuje doctrine. To nie jest blad rzucany przez php. To jest blad rzucany przez Doctrine (ewentualnie symfony). Wiec mi niczego nie tlumacz tylko im

Napisany przez: kusiu 12.02.2018, 12:32:58

Cytat(nospor @ 12.02.2018, 12:23:54 ) *
Ja ci tylko mowie czego oczekuje doctrine. To nie jest blad rzucany przez php. To jest blad rzucany przez Doctrine (ewentualnie symfony). Wiec mi niczego nie tlumacz tylko im


Dziekuje za przetlumaczenie bledu specool.gif Ale nie o to pytalem bo doskonale je rozumiem. Moje pytanie brzmialo czy da sie SF wymusic by sprawdzal methode __call przy odczytywaniu danych z formularza.

Napisany przez: nospor 12.02.2018, 12:36:51

Nie, twoje pytanie brzmialo

Cytat
Co powinienem zrobic aby methoda __call nie byla ignorowana?

Wiec ci odpowiedzialem: pisz do chlopakow z Doctrine by zmienili logike na taka ktora ty akceptujesz.

Napisany przez: kusiu 12.02.2018, 12:40:02

Cytat(nospor @ 12.02.2018, 12:36:51 ) *
Nie, twoje pytanie brzmialo

Wiec ci odpowiedzialem: pisz do chlopakow z Doctrine by zmienili logike na taka ktora ty akceptujesz.


Dziekuje jeszcze raz za pomoc smile.gif To przyjemnosc wrocic tu po paru latach i widziec Ciebie wciaz w formie.

PS: Podejrzewam ze masz konto tez na elekrtoda.pl?

Napisany przez: nospor 12.02.2018, 12:42:38

wow, coz za osobiste przytyki tylko dlatego ze nie ogarniasz prostego komunikatu bledu... Wybacz, ze nie odwzajemnie sie kojarzeniem ciebie sprzed paru lat jak ty kojarzysz mnie ale podejrzewam nic sie nie zmieniles smile.gif

Napisany przez: kusiu 12.02.2018, 18:34:52

Podaje odpowiedz na moje pytanie, ze zrozumieniem ktorego mial problem szanowny Moderator. Obylo sie nawet bez zawracania glowy tworcom Doctrine worriedsmiley.gif (swoja droga skad taka pewnosc ze autorami sa goscie?).
Ponizej podaje sposob na nadpisanie ustawien komponentu PropertyAccessor.

Aby zmienic domyslne ustawienia komponentu nalezy stworzyc wlasna klase:

  1. namespace AppBundle\PropertyAccess;
  2.  
  3. use Symfony\Component\PropertyAccess\PropertyAccessor;
  4.  
  5. class MyPropertyAccessor extends PropertyAccessor
  6. {
  7.  
  8. public function __construct($magicCall = true)
  9. {
  10. parent::__construct($magicCall);
  11. }
  12.  
  13. }


nastepnie w pliku services.yml dodac ponizszy wpis:

  1. property_accessor:
  2. class: Symfony\Component\PropertyAccess\PropertyAccessor
  3. arguments: [true]


Jest to rozwiazanie, ktore zmienia globalnie ustawienia kompomentu.

I jest to moj ostatni wpis na tym forum, bo az zal czytac odpowiedzi zakompleksionych aroganckich moderatorow jak nospor thumbsdownsmileyanim.gif

Nie potrafie znalesc opcji usun konto, wiec prosze Administratora/Moderatora o jego usuniece.



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)