Я использую PHP Zendframework для создания форм. У меня есть объект службы, который мне нужно использовать для заполнения моего ServiceEditForm.php. Но в этой служебной форме у меня есть объект "Биллинг", "Подписка" и массив объектов "Команды". Ниже приведена моя реализация класса Service.
class Service{
public $service_id;
public $ServiceName;
public $TelecomOperator;
public $SubMethod;
public $Provider;
public $active;
public $billingType;
public $subscriptionPlan;
public $commands;
function exchangeArray(array $data);}
Я хочу привязать объект класса Service к моей форме редактирования, которая использовала атрибуты подписки, биллинга и команд в качестве полей. Я могу заполнить значения службы в форме, используя bind, но не другие объекты. вот моя реализация формы
class ServiceEditForm extends Form{
public function __construct($name = null)
{
parent::__construct('Edit Service');
$this->setAttribute('method', 'post');
$this->setAttribute('enctype','multipart/form-data');
//here i have other fields that belongs to service object
$this->add( array(
'name' => 'billingType',
'type' => 'Services\Form\BillingTypeFieldset',
'options' => array(
'label' => 'Billing Type',
),
));
$this->add( array(
'name' => 'subscriptionPlan',
'type' => 'Services\Form\SubscriptionPlanFieldset',
'options' => array(
'label' => 'Subscription Plan',
),
));
$this->add(array(
'type' => 'Zend\Form\Element\Collection',
'name' => 'commands',
'options' => array(
'label' => 'commands',
'count' => 2,
'should_create_template' => true,
'allow_add' => true,
'target_element' => array(
'type' => 'Services\Form\CommandFieldset',
),
),
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Save'
),
));
}
}
Как я уже сказал, я не могу заполнять поля с привязкой в форме с этой реализацией. Любое предложение будет оценено по достоинству.
Хотя я уже отвечаю на вопрос после поиска возможных решений, но решения Hydrator, приведенные в этой ссылке, также полезны для объяснения самих основ, которые следует прочитать перед использованием. Мой плохой я не пошел на полное дросселирование, прежде чем внедрять поля.
http://framework.zend.com/manual/current/en/modules/zend.stdlib.hydrator.html
Этот url объясняет возможную реализацию гидраторов, которые могут предоставить вам очень удобное решение для вашего класса.