簡體   English   中英

ZF2和字段集/表單的使用-意外行為

[英]ZF2 and Fieldset/Form usage - Unexpected Behavior

我正在嘗試使用電子郵件字段和密碼字段創建一個簡單的登錄表單。 嘗試在視圖中顯示單個字段時遇到問題。 Zends網站上的專輯教程未使用FIELDSET ,博客教程僅使用echo $this->formCollection($form); 因此,我認為不會有太大的區別,而且我在網上找到的所有內容都表明語法沒有區別。 據我所知,我所擁有的一切似乎都分別與Zends網站上的Blog和Album教程相匹配。

如果將字段定義移動到FORM類(繞過FIELDSET ),或者使用以下方法轉儲了所有字段,則不會發生該錯誤:

echo $this->formCollection($form);

這是我得到的錯誤:

No element by the name of [USER_LOGIN] found in form

我正在嘗試使用以下方法顯示單個字段:

echo $this->formRow($form->get('USER_LOGIN'));

這是formCollection調用的結果:

(*注意:我嘗試在$form->get()調用中使用“ login-fieldset [USER_LOGIN]”,並得到相同的行為)

<fieldset>
    <fieldset>
        <label>
            <span>Username</span>
            <input type="text" name="login-fieldset[USER_LOGIN]" value="">
        </label>
        <label>
            <span>Password</span>
            <input type="password" name="login-fieldset[USER_PWD]" value="">     
        </label>
    </fieldset>
    <input type="submit" name="submit" value="Login">
</fieldset>

以下是相關代碼:

CSAdmin \\ Controller \\ LoginController:

namespace CSAdmin\Controller;

use Zend\View\Model\ViewModel;
use Zend\Form\FormInterface;

class LoginController extends AdminController
{
    protected $loginService;

    protected $loginForm;

    public function __construct(
        \CSAdmin\Service\LoginServiceInterface $loginService,
        FormInterface $loginForm) {

        parent::__construct();
        $this->loginService = $loginService;
        $this->loginForm    = $loginForm;
    }

    public function indexAction()
    { 
        array_push($this->layoutVars['customStyles'], 'css/admin/form.css');
        array_push($this->layoutVars['customStyles'], 'css/admin/styles.css');

        $request = $this->getRequest();
        $login    = $this->loginService->findUser($this->params('USER_LOGIN'));
        $this->loginForm->bind($login);

        if ($request->isPost()) {
            //Nothing here yet
        }

        //Override view to use predefined Admin Views
        $view = new ViewModel(array('data'=>$this->data,
                                    'form'=>$this->loginForm
        ));
        $view->setTemplate('CSAdmin/login/login.phtml'); // path to phtml file under view folder

        //Set the Admin Layout
        $layout = $this->layout();
        $layout->setVariable('layout', $this->layoutVars);
        $layout->setTemplate('layout/CSAdmin/login.phtml');

        //Render Page
        return $view;
    }
}

CSAdmin \\ Form \\ LoginForm:

namespace CSAdmin\Form;

 use Zend\Form\Form;
 use Zend\Stdlib\Hydrator\ClassMethods;
 use \CSAdmin\Model\User;

 class LoginForm extends Form
 {
     public function __construct($name = null, $options = array())
     {
         parent::__construct($name, $options);
         $this->setHydrator(new ClassMethods(false));
         $this->setObject(new User());

         $this->add(array(
             'name' => 'login-fieldset',
             'type' => 'CSAdmin\Form\LoginFieldset',
             'options' => array(
                 'use_as_base_fieldset' => true
             )
         ));
         $this->add(array(
             'type' => 'submit',
             'name' => 'submit',
             'attributes' => array(
                 'value' => 'Login'
             )
         ));
     }

 }

CSAdmin \\ Form \\ LoginFieldset:

namespace CSAdmin\Form;

use Zend\Form\Fieldset;
use Zend\Stdlib\Hydrator\ClassMethods;
use \CSAdmin\Model\User;

class LoginFieldset extends Fieldset
{
    public function __construct($name = null, $options = array())
    {
        parent::__construct($name, $options);

        $this->setHydrator(new ClassMethods(false));
        $this->setObject(new User());

        $this->add(array(
            'type' => 'text',
            'name' => 'USER_LOGIN',
            'options' => array(
                'label' => 'Username'
            )
        ));

        $this->add(array(
            'type' => 'password',
            'name' => 'USER_PWD',
            'options' => array(
                'label' => 'Password'
            )
        ));
    }
}

您需要先獲取字段集,然后再獲取元素,因此請嘗試:

echo $this->formRow($form->get('login-fieldset')->get('USER_LOGIN');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM