2013-09-28 51 views
0

我用控制器創建了一個模塊。我的模塊被稱爲'App \ Module \ Foo',控制器被稱爲'App \ Controller \ Foo'。我通過使用Zend\Mvc\Application::init(require 'config/application.config.php')->run();配置了Zend槽application.config.php。 (我已經建立了自定義啓動,神似ZF2骨架之一。)Zend Framework 2中Model,View,Controller和Module之間的關係是什麼?

'router' => array(
    'routes' => array(
     'Foo\Module\Index' => array(
      'type' => 'segment', 
      'options' => array(
       'route' => '[/]', 
       'constraints' => array(
        'controller' => 'Foo\Controller\Index' 
       ) 
      ) 
     ) 
    ) 
) 

從我的理解這個配置將對於Web根目錄的所有請求重定向到Foo\Controller\Index控制器。這真的必須在Foo\Module\Index數組密鑰中,還是我可以用我認爲適合該路由的任何名稱來替換密鑰? (只要它是唯一的)如果這是真的,這是否意味着我可以有一個大模塊與多個路線?

另外,它是如何知道在該控制器上調用什麼方法的?在Zend引用中,似乎沒有一個代理需要一些參數(如動作)並將其發送到控制器內的正確方法。看起來ZF2通過魔法知道要調用什麼方法。

困擾我的另一件事是框架如何知道視圖的位置?官方的參考文獻說它會尋找{controller name}/{action name},但它會在哪裏看,以及如果我沒有一個行動變量呢?

另外我正確的時候,我想一個模型基本上只是一個數據結構,你可以使用(像一個用戶類或Permissions類)和一個窗體是一個類處理實際POST數據通過HTML發送通過形成?

+0

tereško我已閱讀,則已,看了一遍剛纔它實際上是在http://framework.zend.com/manual/2.0/en/modules/zend.mvc.intro.html –

+0

@描述,我的問題都沒有回答。它基本上解釋了Skeleton應用程序是如何工作的,而我沒有使用它。 –

+0

@Binero:如果他們提供的文檔不夠充分,請向供應商打開支持憑單,以便他們從用戶那裏獲得一些反饋。 – hakre

回答

0
  1. 您在路由配置中分配的控制器完全取決於您。請記住,實際上你只能分配一個key。因此,'controller' => 'ctrl-foo'也可以是有效的,只要有控制器可調用'ctrl-foo' => 'MyNamespace\Controller\FooController分配。

  2. 您根據密鑰constraints分配了控制器 - 這是錯誤的 - 它需要在defaults之下。然後數組變成'defaults => [ 'controller' => 'foo', 'action' => 'bar' ]。這會將您的路線引導至由控制器的密鑰foo分配給控制器的barAction()的控制器。另一方面,constraint就像一個即時驗證。例如,您爲路由指定一個ID參數'route' => '/:id',然後您可以通過'constraints' => [ 'id' => '\d+' ]告訴路由器只允許數字值。請注意,陣列語法僅爲PHP 5.4+

  3. 您總是有一個「動作變量」。 ViewManager通過該配置密鑰view_manager進行配置。視圖將在template_path_stack內查找

  4. 模型可以只是您提到的一個POPO。但是模型也可以更多。這是MVC理解的一部分,但我不打算在這裏詳細介紹。

+0

有沒有辦法使用代理而不是醜陋的操作方法? –

+0

「醜陋的行動方法」? MVC中必須有一個控制器。沒有一個控制器,誰應該控制你的應用程序的工作流程?在幾乎每個框架中,我都知道這是「someController」中的「fooAction」 – Sam

相關問題