在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赋值给隐藏域,再提交表单:
- 先在
DashboardForm中添加隐藏域字段:
class DashboardForm extends Form { public function initialize($entity = null, $options = null) { // 原有字段... $buttonId = new Hidden('button_id'); $this->add($buttonId); } }
- 在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;") }}
- 控制器中获取:
$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
相关产品推荐
相关产品推荐

