Symfony2 onduidelijkheden (Twig & Namespaces)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ijstheefles
  • Registratie: December 2011
  • Laatst online: 25-08 22:56
IS OPGELOST - Sorry voor de nutteloze klik op de titel!

Hoi allemaal!

Als eerst alvast een fijn 2012 toegewenst!

Om vervolgens verder te gaan:

Ben mezelf aan het verdiepen in Symfony2, alleen ben ik bij het doorlopen van deze tutorial:
http://tutorial.symblog.c...ine-2-the-blog-model.html

Een aantal zaken tegengekomen.

1. Als ik vanuit twig een blog.title call maak, moet ik het betreffende attribuut uit het object blog public maken, anders werkt 't niet. Een snelle google zegt dat twig probeert een getter aan te roepen, maar ik kan me niet voorstellen dat getTitle() niet gevonden kan worden. Wat doe ik fout? Mis ik iets?

Geprobeerd:
- blog.title (Werkt alleen als het attribuut public is.
- blog.getTitle() (werkt niet)
- blog.getTitle (werkt niet)
- blog->getTitle() (twig flipt em op '>', niet heel gek gezien twig met de . al een method probeert aan te roepen als 't attribuut niet public is.)
Oplossing:
https://github.com/fabpot/Twig/issues/80
In mijn geval: Blog object, assignen aan 'blog' via twig.
Vervolgens had blog een attribuut 'title'
Dit is, met private/protected attributes aan te roepen met get<attribuut>.
Dus gettitle getdatecreated getimage enzovoorts.

[Dit 2e probleem is / lijkt inmiddels opgelost]
2. Ik zag dat ik in mijn controller de namespace moest escapen wilde ik een object buiten de huidige namespace bereiken. Niet heel gek. Vervolgens probeerde ik met:
PHP:
1
2
use Blogger\BlogBundle\Form;
use Blogger\BlogBundle\Entity;

En vervolgens $foo = new Blog(); te doen. Dit werkte alleen niet.
PHP:
1
Fatal error: Class 'Blogger\BlogBundle\Controller\Enquiry' not found in Blogger/BlogBundle/Controller/PageController.php on line 24


Antwoord: In plaats van tot op de map de namespace te use'en, de klasse ook meenemen. Dan werkt 't wel.

Volgens mij ben ik in beide gevallen nog geen minuut van het antwoord, alleen zoek ik in de verkeerde richting ofzo.

Enorm bedankt voor enig antwoord... kinda stuck.

[ Voor 13% gewijzigd door Ijstheefles op 31-12-2011 16:12 . Reden: Alle problemen zijn opgelost, admin (Nme) is ingelicht. ]


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik ben geen Twig expert, dus kan je vraag daarop niet beantwoorden. Wel wil ik even wat verduidelijken over namespaces:
Antwoord: In plaats van tot op de map de namespace te use'en, de klasse ook meenemen. Dan werkt 't wel.
Je kan met use drie dingen importeren:
  1. Namespaces
  2. Classes
  3. Interfaces
Je kan een namespace (bijvoorbeeld Blogger\BlogBundle\Entity) importeren, waarna je relatief aan die import je klasse moet refereren met:
PHP:
1
2
3
4
5
namespace Foo;

use Blogger\BlogBundle\Entity;

$blog = new Entity\Blog;


Je kan ook een class importeren (bijvoorbeeld Blogger\BlogBundle\Entity\Blog) met:
PHP:
1
2
3
4
5
namespace Foo;

use Blogger\BlogBundle\Entity\Blog;

$blog = new Blog;

Het staat allemaal goed beschreven in de php manual. Het is dus niet zomaar dat je altijd de FQCN moet gebruiken om te importeren, je kan ook een gehele namespace importeren. Als je bijvoorbeeld een CRUD controller bouwt die met meerdere forms werkt, kan je eenvoudig tot de form namespace importeren en in de klasse zelf met Form\Foo e.d. werken :)

Acties:
  • 0 Henk 'm!

  • Ijstheefles
  • Registratie: December 2011
  • Laatst online: 25-08 22:56
Je kan een namespace (bijvoorbeeld Blogger\BlogBundle\Entity) importeren, waarna je relatief aan die import je klasse moet refereren
Ja, daar kom ik dus net 2 minuten geleden achter inderdaad.

Bedankt, das net de schakel die nog nodig was.

Fijne jaarwisseling! :D (Gezien twig probleem is opgelost inmiddels)