You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:51:03