Я хочу заполнить поле выбора в форме Zend, используя вспомогательную функцию.
Ниже приведены вспомогательный код и код формы.
myhelper.php
namespace myspace\View\Helper;
use Zend\View\Helper\AbstractHelper,
Zend\ServiceManager\ServiceLocatorInterface as ServiceLocator;
use Zend\Db\ResultSet\ResultSet;
class MyHelper extends AbstractHelper {
protected $serviceLocator;
protected $dbAdapter;
protected $resultData;
public function __construct(ServiceLocator $serviceLocator) {
$this->serviceLocator = $serviceLocator;
}
public function getMyList() {
return $states = array(
'a' => 'a',
'b' => 'b',
'c' => 'c', );
}
public function getServiceLocator() {
return $this->serviceLocator;
}
}
Мой код формы
Myform.php
namespace myspace\Form;
use Zend\Form\Form;
use Zend\Db\Adapter\AdapterInterface;
use Zend\Form\Element;
use masterinfo\View\Helper\MasterHelper;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class UserForm extends Form implements ServiceLocatorAwareInterface {
protected $dbAdapter;
protected $serviceLocator;
public function __construct($args) {
parent::__construct('user');
$dbAdapter = $args['dbAdapter'];
$this->setDbAdapter($dbAdapter);
$this->setAttribute('method', 'post');
$this->setAttribute('class', 'form-horizontal');
$this->setAttribute('role', 'form');
$this->setAttribute('enctype', 'multipart/form-data');
$this->add(array(
'name' => 'testselect',
'type' => 'Zend\Form\Element\Select',
'attributes' => array(
'class' => 'single-select',
'id' => 'testselect',
'required' => 'required',
),
'options' => array(
'value_options' => /***here I need to call helper function getMyList()****/,
'empty_option' => 'Select Status'
),
));
}
function setDbAdapter(AdapterInterface $dbAdapter) {
$this->dbAdapter = $dbAdapter;
}
function getDbAdapter() {
return $this->dbAdapter;
}
public function getServiceLocator() {
return $this->serviceLocator;
}
public function setServiceLocator(ServiceLocatorInterface $serviceLocator) {
$this->serviceLocator = $serviceLocator;
}
}
Я не уверен, как вызвать вспомогательную функцию здесь. Пожалуйста, помогите, я относительно новичок в ZF2.
Код, который я вставил, является примером, на самом деле функция getMyList предполагает заполнение длинного массива, и я не хочу помещать этот длинный массив в форму, так как я буду использовать этот массив еще в нескольких местах.
получил это сам.
Я могу передать servicelocator от контроллера.
$form = new \myspace\Form\UserForm(array('dbAdapter' => $dbAdapter,'sm'=>$this->getServiceLocator()));
а затем в форме
....
....
$this->add(array(
'name' => 'testselect',
'type' => 'Zend\Form\Element\Select',
'attributes' => array(
'class' => 'single-select',
'id' => 'testselect',
'required' => 'required',
),
'options' => array(
'value_options' => $this->getMyArray($args['sm']),
'empty_option' => 'Select Status'
),
));
....
....
function getMyArray($serviceLocator) {
$master = new MyHelper($serviceLocator);
return $master->getMyList();
}
Других решений пока нет …