Использование ZF2 и Fieldset / Form — неожиданное поведение

Я пытаюсь создать простую форму входа с полем электронной почты и паролем. У меня возникают проблемы при попытке отобразить отдельные поля в моем представлении. В учебнике по альбому на сайте Zends не использовалось FIELDSET и блог только учебник используется echo $this->formCollection($form);, Поэтому я предположил, что не будет большой разницы, и все, что я нахожу в Интернете, предполагает, что нет разницы в синтаксисе. Насколько я могу судить, все, что у меня есть, соответствует учебникам по блогам и альбомам на веб-сайте Zends соответственно.

Ошибка не возникает, если я перенесу определения полей в свой 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 вызов:

(* ПРИМЕЧАНИЕ. Я пытался использовать «login-fieldset [USER_LOGIN]» в $form->get() позвонил и получил такое же поведение)

<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 \ Форма \ 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 \ Форма \ 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'
)
));
}
}

0

Решение

Вам нужно получить набор полей, а затем элемент, поэтому попробуйте:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]