Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF][ZF3]fabryka formularza jest ignorowana
trzczy
post 26.02.2018, 17:44:21
Post #1





Grupa: Zarejestrowani
Postów: 460
Pomógł: 49
Dołączył: 5.06.2011

Ostrzeżenie: (0%)
-----


Natknąłem się na problem, który od paru godzin nie daje mi spokoju:

jak dodać fabrykę dla klasy formularza.

Ogołociłem zagadnienie do minimalnej wielkości, by mówić tylko o sednie sprawy. Mój kod posiada teraz deklarację klucza form_elements w module.config.php. Wskazuje ona fabrykę, jaka ma odpalać klasę formularza. Są pliki klas formularza i fabryki. Klasa formularza odpalana jest w kontrolerze.

Problem polega na tym, że kod zachowuje się tak, jakby fabryki nie było. Fabryka ma wstrzykiwać stringa "It works", by pokazać, że została odpalona. Tymczasem stringa tego nie wstrzykuje. Nawet jak wrzucę do fabryki die("costam");, to funkcja ta nie działa. Może ktoś by znalazł błąd. Oto pliki:

Kontroler:
  1. namespace Application\Controller;
  2.  
  3. use Application\Form\AbcForm;
  4. use Zend\Mvc\Controller\AbstractActionController;
  5.  
  6. class AbcController extends AbstractActionController
  7. {
  8. public function indexAction()
  9. {
  10. $form = new AbcForm();
  11. }
  12. }


  1. namespace Application\Controller\Factory;
  2.  
  3. use Interop\Container\ContainerInterface;
  4. use Application\Controller\AbcController;
  5.  
  6. class AbcControllerFactory
  7. {
  8. public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
  9. {
  10. return new AbcController();
  11. }
  12. }


Form:
  1. namespace Application\Form;
  2.  
  3. use Zend\Form\Element;
  4. use Zend\Form\Form;
  5. use Zend\Hydrator\ClassMethods as ClassMethodsHydrator;
  6. use Zend\InputFilter\InputFilter;
  7.  
  8. class AbcForm extends Form
  9. {
  10. public function __construct($letter='no factory')
  11. {
  12. die($letter);
  13. }
  14. }

  1. namespace Application\Form\Factory;
  2.  
  3. use Interop\Container\ContainerInterface;
  4. use Zend\ServiceManager\Factory\FactoryInterface;
  5. use Application\Form\AbcForm;
  6.  
  7. class AbcFormFactory implements FactoryInterface
  8. {
  9. public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
  10. {
  11. return new AbcForm("It works");
  12. }
  13. }


module.config.php
  1. namespace Application;
  2.  
  3. use Zend\Router\Http\Literal;
  4. use Zend\Router\Http\Segment;
  5. use Zend\ServiceManager\Factory\InvokableFactory;
  6. use Application\Route\StaticRoute;
  7. use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
  8. use Application\Form\Factory\AbcFormFactory;
  9. use Application\Form\AbcForm;
  10.  
  11. return [
  12. 'form_elements' => [
  13. 'factories' => [
  14. AbcForm::class => AbcFormFactory::class,
  15. ],
  16. ],(...)




Ten post edytował trzczy 26.02.2018, 18:00:43
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 17:55