我建议使用下拉菜单而不是 4 个按钮,只需一个简单的提交按钮即可保存它。它应该可以解决您的问题,并且看起来比使用 4 个相同的按钮来保存不同的值要好得多,示例代码如下:
实体应该如下所示:(我们使用 toString 方法来显示实际名称,而不是 (0, 1, 2, 3)
abstract class OrderStatus{
const submitted = 0;
const Ivoiced = 1;
const Paid = 2;
const Shipped = 3;
}
/**
* @ORM\Column(type="integer")
*/
protected $order_status; // see OrderStatus enum above
/**
* Set orderStatus
*
* @param integer $orderStatus
*
* @return Order
*/
public function setOrderStatus($orderStatus)
{
$this->order_status = $orderStatus;
return $this;
}
/**
* Get orderStatus
*
* @return integer
*/
public function getOrderStatus()
{
return $this->order_status;
}
public function getOrderStatusToString()
{
switch ($this->getOrderStatus()) {
case 0: return "submitted"; break;
case 1: return "invoiced"; break;
case 2: return "paid"; break;
case 3: return "Shipped"; break;
}
}
在控制器中添加这个:
//表单中的下拉菜单(如果你愿意,可以放在formType而不是控制器中)
$form = $this->createFormBuilder(your.entity.name)
->add('orderStatus', 'choice', array(
'choices' => array(
'submitted' => 0,
'invoiced' => 1,
'paid' => 2,
'Shipped' => 3,
),
'choices_as_values' => true,
'label'=>false
))
$form->add('save', 'submit', array('label' => 'Save'));
$form = $form->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em=$this->getDoctrine()->getManager();
$em->persist(your.entity.name);
$em->flush();
}
在您的 html 文件中,例如:(使用您想要的任何 css)
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
这一切(加上一些调整)应该可以解决问题