Laminas / Zf3 如何在Fieldset中获取Form传入的参数
Laminas表单自定义参数传递到Fieldset实现方案
步骤1:表单类接收控制器传入的参数
你不需要重写表单的构造方法,Laminas表单默认提供getOption()方法可直接读取控制器传入的自定义参数,修改RealisationImpactForm的init方法即可:
class RealisationImpactForm extends CommunForm { public function init() { // 直接读取控制器传入的参数 $idProjet = $this->getOption('idProjet'); $idSupervision = $this->getOption('idSupervision'); $this->setName('RealisationImpactForm'); // 把参数传入Fieldset的配置项 $this->addFieldset(RealisationImpactFieldset::class,[ 'use_as_base_fieldset' => true, 'idProjet' => $idProjet, 'idSupervision' => $idSupervision ]); $this->addSubmitButton('next', 'Poursuivre', 'next', 'btn btn-vert w-100'); $this->addSubmitButton('previous', 'Retour', 'previous', 'btn btn-rouge w-100'); } }
步骤2:Fieldset中读取传入的参数
你可以选择在__construct构造方法或者init初始化方法中读取参数,两种方式都支持:
方式1:构造方法中读取
class RealisationImpactFieldset extends CommunFormFieldset implements InputFilterProviderInterface { private $mapper; private $idProjet; private $idSupervision; public function __construct($name = null, $options = []) { $this->mapper = $options['mappers'] ?? []; // 直接从配置项中读取表单传入的参数 $this->idProjet = $options['idProjet'] ?? null; $this->idSupervision = $options['idSupervision'] ?? null; parent::__construct('RealisationImpactForm',$options); $this->setHydrator(new ReflectionHydrator()); $this->setObject(new Supervision()); $this->setLabel('Realisation Impact'); } public function init() { parent::init(); // 直接使用参数即可 $effets = $this->mapper['supervision']->getRapportEffetByProjetForSuivi($this->idProjet,$this->idSupervision); // 后续添加字段逻辑不变 } }
方式2:init方法中直接读取(更简便)
不需要修改构造方法,直接调用getOption()即可读取:
public function init() { parent::init(); $idProjet = $this->getOption('idProjet'); $idSupervision = $this->getOption('idSupervision'); // 直接使用参数 $effets = $this->mapper['supervision']->getRapportEffetByProjetForSuivi($idProjet, $idSupervision); }
内容的提问来源于stack exchange,提问作者Samuel N.
相关产品推荐
相关产品推荐

