2012-09-20 20 views
6

W których plikach potrzebujemy wprowadzić zmiany w celu dodania nowego kontrolera w Module i wywołania go poprzez URL.zend framework 2 dodaj nowy kontroler

Czy istnieje sposób, w jaki dodajemy nowy plik kontrolera i wywołujemy go przez URL bez zmiany jakichkolwiek innych plików konfiguracyjnych.

Uciążliwe będzie dokonywanie zmian w plikach konfiguracyjnych podczas każdego dodawania lub edycji w plikach kontrolera.

Odpowiedz

4

Aby utworzyć nowy kontroler, trzeba przynajmniej

  • utworzyć klasę kontrolera
  • upewnij się, że masz pasujący trasy, który spełnia cel (można wziąć już istniejących, a także utwórz nowy dla celów specjalnych)
  • utwórz wpis controllers.invokables w module module.config.php.

Nie ma sposobu obejścia tych trzech prostych kroków. Nie rozumiem, dlaczego adaptowanie module.config.php powinno być problemem podczas dodawania kontrolera - do tego służą pliki konfiguracyjne. Łącznie z otwieraniem, zapisywaniem i zamykaniem zajmuje to ok. 10-15 sekund. Nie zamierzasz stworzyć setek kontrolerów, prawda?

+6

zf1 nie był nowicjuszem, zf2 jeszcze trudniejszym :))) – SMka

+0

Nie powiedziałbym tego. Nie używałem ZF1, ale ZF2 ma tyle fajnych aspektów, których ZF1 nie ma (według opinii innych ludzi). –

+0

praca z Zf1 przez pięć lat. zf2 - naprawdę, naprawdę dobrze :) – SMka

9

Dodaję trochę wyjaśnień do tego, co Daniel powiedział na "upewnij się, że masz pasującą trasę, która spełnia twój cel ...". Do mojego celu starałem się dostosować trasy do modułu/aplikacji/src/Application/Controller/IndexController.php i module/Application/src/Application/Controller/ProfileController.php, jednak starałem się rozwiązać cokolwiek do mojego kontrolera ProfileController. Nie było również jasne, czy ZF2 może pomieścić wiele kontrolerów w jednym module. Myślałem, że to musi i to robi! Biorąc pod uwagę dwa powyższe kontrolery, tak właśnie stworzyłem tablicę "routerów" wewnątrz modułu/Application/config/module.config.php.

'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/', 
       'defaults' => array(
        'controller' => 'Application\Controller\Index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
     'application' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/application', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'default' => array(
        'type' => 'Segment', 
        'options' => array(
         'route' => '/[:controller[/:action]]', 
         'constraints' => array(
          'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
         ), 
         'defaults' => array(
         ), 
        ), 
       ), 
      ), 
     ), 

     'profile' => array(
      'type' => 'literal', 
      'options' => array(
       'route' => '/profile', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Profile', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
    ), 
), 

Również to jest to, co przypomina moje "kontrolerzy" w module modules.config.php po sukcesie.

'controllers' => array(
    'invokables' => array(
     'Application\Controller\Index' => 'Application\Controller\IndexController', 
     'Application\Controller\Profile' => 'Application\Controller\ProfileController' 
    ), 
), 
+4

Zend 2 naprawdę nie jest tak funkcjonalny ... Nie powinienem musiał przechodzić przez takie obręcze, aby dodać kontroler. Tylko moja opinia. – aserwin

+0

@ user1815615, idealne wyjaśnienie :) +1 – SagarPPanchal

-1

Z Zend Framework 2 odniesienie

Informujemy wniosek o kontrolerach możemy spodziewać się, że w aplikacji . Ma to na celu uniemożliwienie komukolwiek zażądania jakiejkolwiek usługi, o której ServiceManager wie o usiłowaniu złamania aplikacji. Dyspozytor wykorzystuje specjalny pojemnik o określonym zakresie, który będzie pobierał tylko kontrolery , które są z nim specjalnie zarejestrowane, albo jako klasy, które można zarezerwować do dokonania rezerwacji, lub przez fabryki.

src: http://framework.zend.com/manual/2.0/en/modules/zend.mvc.quick-start.html#create-a-route

Dodawanie kontrolerów nie jest związane z routingiem, z wyjątkiem stycznie powodu programistów, którzy chcą być w stanie określić kontroler w URL. Jest to problem związany z bezpieczeństwem, ponieważ traktujemy kontrolerów jako usługi.

To jest wysiłek (a) jednoznacznie określający dostępność kontrolerów oraz (b) domyślne zabezpieczenie.

Jak powiedział Matthew Weier O'Phinney.