两个提交按钮,一个表单(Yii)


Two submit buttons, one form (Yii)

我的表单中有两个CHtml::submitButton(),即"接受"和"拒绝"。每个按钮都有一个特定的 ID ...当按下两者中的任何一个时,我想在我的控制器中触发一个动作。下面是代码片段。

====

=============================================================

视图

<?php
echo CHtml::beginForm('mycontrollerName/AcceptUserRegistration','get');
?>
<?php echo CHtml::submitButton('Accept', array('id' => 'accept')); ?>
<? echo '&nbsp;&nbsp;&nbsp;'; ?>
<?php echo CHtml::submitButton('Reject', array('id' => 'reject')); ?> 
<?php echo CHtml::endForm(); ?>

====

============================================================

控制器

public function actionAcceptUserRegistration() {
$value = $_GET['id'];
if($value == "accept"){
//will do something here
}
if($value == "reject"){
//will do something here.
}
}

===

============================================================================

当我以这种方式实现它时。 控制器端的 GET 值为空。我做错了什么?还是有其他方法可以解决这个问题?

你忘了给提交按钮一个名字(除非你的框架做了一些我们无法知道的魔法 - 你真的应该发布生成的HTML代码!

如果这样做,$_GET['buttonname'] 中的值将是其(而不是其 id),即 AcceptReject .一旦你进入i18n,这就会变得非常混乱,所以你可能想为按钮使用不同的名称,然后检查isset($_GET['buttonname1'])isset($_GET['buttonname2'])

下面是您尝试实现的代码示例:

视图:

<?php
echo CHtml::beginForm('mycontrollerName/AcceptUserRegistration','get');
?>
<?php echo CHtml::submitButton('Accept', array('id' => 'accept', 'name' => 'accept')); ?>
<? echo '&nbsp;&nbsp;&nbsp;'; ?>
<?php echo CHtml::submitButton('Reject', array('id' => 'reject', 'name' => 'reject')); ?> 
<?php echo CHtml::endForm(); ?>

注意:我添加了名称参数。由于名称不会向用户显示,因此可以使用"接受"而不是"接受"。

控制器:

public function actionAcceptUserRegistration() {
if(isset($_GET['accept'])) {
     //accepted
} else if(isset($_GET['reject'])) {
     //rejected
}
//I recommend using POST method instead of GET for posting the form.
}