2011-01-24 29 views
0

這是我第一次注意到這一點,它讓我感到很驚訝。表單無權訪問其值。這是正常的嗎?

我有一個簡單的文本元素zend_form。

$name = new Zend_Form_Element_Text('name'); 
$name->setLabel('Name'); 
$this->addElement($name); 

奇怪的是,當我提交表單,並嘗試閱讀形式本身的價值(我在做一些調試不是有控制器),$name->getValue()不工作,但直接$ _POST的作品。

echo $name->getValue(); //gives blank 
echo $_POST['name']; //gives the right value 

這是正常的嗎?表單沒有它的價值?我認爲最好用$ field-> getValue()來讀取它們,而不是直接訪問$ _POST值。

第二個問題是,要讀取表單中的值,是否有比直接從$ _POST訪問更好的方法?

回答

2

你需要明確傳遞數據的形式,因爲ZF不知道從哪裏得到它:

if ($form->isValid($_POST)) { // access values } 

if ($form->isValid($request->getPost())) { // access values } 
+0

This works。但是,真的如何才能讓表單無法訪問其值?它需要這些值給驗證器和過濾器。實際上我正在做的是將值傳遞給自定義過濾器。我認爲過濾器會自動從已添加的字段中獲取$值,但這不起作用,所以我將自己的$值傳遞給過濾器。當然,如果表單可以讀取它自己的值,那麼我就可以直接傳遞它,而不需要控制器。我可能會發布有關過濾器的其他問題。這可能是我在那裏做錯了事。 – jblue 2011-01-24 01:38:24

+0

「但實際上,表單可能無法訪問其值」 - 它確實可以顯式訪問所傳遞的數據。 ZF無法預測從何處獲取數據:$ _POST,$ _GET或者甚至從文件中獲取數據。 – zerkms 2011-01-24 01:40:29

1

號棒使用$_POST$_GET。老實說,我不明白你爲什麼使用Zend來創建和從表單獲取數據,當用直接的PHP來做到這一點時更容易。

<?php if(!isset($_POST['name'])): ?> 
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
    <label for="name">Name:</label> <input type="text" name="name" id="name" /> 
</form> 
<?php else: ?> 
Value = <?= $_POST['name'] ?> 
<?php endif; ?> 

我想這一切都在您的編碼風格。我更喜歡上面的內容,但是如果你想從HTML中分離邏輯,那麼Zend肯定是一個選擇。

相關問題