2011-02-08 115 views
2

我開始使用zend框架。我遇到了這個問題的形式。 當在瀏覽器中打開localhost/item/create時,只顯示hello,表單不呈現。zend框架窗體沒有顯示

我做了什麼: 我在我的項目創造了一個控制器zf.sh create controller item 然後zf.sh create action create item。 庫文件夾裏,創建APP-> forms-> ItemEditor.php

<?php 

class App_forms_ItemEditor extends Zend_Form 
{ 
    public function __construct() 
    { 
     $email = $this->createElement('text', 'email'); 
     $email->setLabel('Your email address:'); 
     $email->setRequired(TRUE); 
     $email->addValidator(new Zend_Validate_EmailAddress()); 
     $email->addFilters(array(
     new Zend_Filter_StringTrim(), 
     new Zend_Filter_StringToLower() 
     )); 
     $email->setAttrib('size', 40); 
     $this->addElement($email); 

    } 
} 

宣佈在的application.ini文件命名空間

autoloaderNamespaces[] = "App_" 

內,則須─> scripts->用品 - > create.phtml這樣做:

hello 
<?php 
echo $this->form->render(); 
?> 

,然後裏面ItemController.php:

public function createAction() 
    { 
     $this->view->form=new App_forms_ItemEditor(); 
    } 

只在瀏覽器中顯示hello,表格的其餘部分未顯示。任何人都可以指出我做錯了什麼。 謝謝

+0

你有沒有看HTML源(在你的瀏覽器)? – zerkms 2011-02-08 05:26:25

回答

4

我認爲原因是你覆蓋Zend_Form :: __ constructor()。擴展Zend_Form的表單應該使用init()函數來初始化它們的元素,而不是__constructor()

+0

這並it.thanks! – anp 2011-02-08 05:47:20

3

來創建表單元素的最佳位置是覆蓋init()方法,如

class App_forms_ItemEditor extends Zend_Form 
{ 
    public function init() 
    { 
     $email = $this->createElement('text', 'email'); 
     $email->setLabel('Your email address:'); 
     $email->setRequired(TRUE); 
     $email->addValidator(new Zend_Validate_EmailAddress()); 
     $email->addFilters(array(
     new Zend_Filter_StringTrim(), 
     new Zend_Filter_StringToLower() 
     )); 
     $email->setAttrib('size', 40); 
     $this->addElement($email); 

    } 
} 

如果劫持Zend_Form::__construct(),你至少應該接受相同的參數,並通過他們使用parent::__construct()

另外,我對你的類名稱的「form」部分中的小寫字母「f」有些不確定。從內存中,模塊自動加載器將「Form」名稱部分轉換爲模塊中的「forms」目錄。

然而,我注意到,你不使用模塊自動加載(或至少,你還沒有證明你是)


關於模塊自動加載機...

自舉過程使用配置的appnamespace值(通常爲「應用程序」)和基本路徑「應用程序」註冊模塊自動裝載機。

模塊自動加載器會自動註冊以配置的名稱空間(例如「Application_」)開頭的類的某些類名/路徑映射。這包括表單。

基本上,這意味着您可以創建application/forms/MyForm.php下的表單,其類名爲Application_Form_MyForm,自動加載器會找到它。

打開`Zend_Application_Module_Autoloader」來查看完整列表。

+0

@Phil布朗又一次心靈的融合:-) – Marcin 2011-02-08 05:35:59