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

在Phalcon控制器中如何获取提交按钮的ID?

问题描述

我需要在表单提交时获取提交按钮的ID,但目前提交后控制器只能拿到按钮的value值,无法获取ID。

Volt模板中的按钮代码

{{ submit_button("Forward", "name": "Forward", "class": "btn btn-primary-outline text-white text-sm", 'value':'submit', 'id' : 1) }}

控制器中查看请求的代码

dd($this->request->getPost());

返回结果

Array (2) (
  [Forward] => String (33) "submit"
  [csrf] => String (32) "Y3BiVE9nRFBRWFZ3QTFsQkdoVjFHQT09"
)

表单类代码

class DashboardForm extends Form
{
    /**
     * @param null $entity
     * @param null $options
     */
    public function initialize($entity = null, $options = null)
    {
        $id = new Hidden('id');
        $this->add($id);
       
        // CSRF
        $csrf = new Hidden('csrf');
        $csrf->addValidator(new Identical([
            'value' => $this->security->getSessionToken(),
            'message' => 'CSRF validation failed'
        ]));
        $csrf->clear();
        $this->add($csrf);
    }
}
解决方法

核心原因

HTML表单提交时,只有控件的name和value属性会被包含在POST数据中,id属性仅用于页面内元素标识(如JS、CSS选择),不会自动提交到后端,所以直接通过按钮的id属性拿不到值,需要换方式传递标识。


方案1:将按钮的value设置为需要的ID值

如果按钮的显示文本和提交值可以分离,直接把value设为你需要的ID(这里是1),按钮的显示文本保持Forward:

{{ submit_button("Forward", "name": "Forward", "class": "btn btn-primary-outline text-white text-sm", 'value':'1', 'id' : 1) }}

之后在控制器中直接获取:

$buttonId = $this->request->getPost('Forward'); // 结果为1

如果需要同时保留submit标识和ID,可以用拼接字符串(如submit_1),之后在控制器拆分:

$value = $this->request->getPost('Forward');
$buttonId = str_replace('submit_', '', $value); // 从submit_1中提取1

方案2:通过隐藏域传递按钮ID

在表单中添加一个隐藏域,点击按钮时用JS将按钮的id赋值给隐藏域,再提交表单:

  1. 先在DashboardForm中添加隐藏域字段:
class DashboardForm extends Form
{
    public function initialize($entity = null, $options = null)
    {
        // 原有字段...
        $buttonId = new Hidden('button_id');
        $this->add($buttonId);
    }
}
  1. 在Volt模板中修改按钮,添加点击事件:
{{ submit_button("Forward", "name": "Forward", "class": "btn btn-primary-outline text-white text-sm", 'value':'submit', 'id' : 1, 'onclick': "document.getElementById('button_id').value = this.id;") }}
  1. 控制器中获取:
$buttonId = $this->request->getPost('button_id'); // 结果为1

方案3:将ID包含在按钮的name属性中

给按钮设置包含ID的name,比如Forward_1:

{{ submit_button("Forward", "name": "Forward_1", "class": "btn btn-primary-outline text-white text-sm", 'value':'submit', 'id' : 1) }}

控制器中遍历POST数据,提取ID:

$buttonId = null;
foreach ($this->request->getPost() as $key => $value) {
    if (str_starts_with($key, 'Forward_')) {
        $buttonId = substr($key, strlen('Forward_'));
        break;
    }
}
// $buttonId的值为1

内容的提问来源于stack exchange,提问作者ceaiius

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:47