由于我已经found out,Doctrine2“不支持通过SQL中的”DEFAULT“关键字在列中设置默认值....您可以将类属性用作默认值值”。
class Product
{
// ...
/**
* @var string $name
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name = "";
/**
* @var string $sale
*
* @ORM\Column(name="sale", type="boolean")
*/
private $sale = false;
但即使我这样做,生成的CRUD表单仍然要求我填写所有表格。在布尔属性的情况下,这甚至意味着我只能将其设置为真(即1
)。
我做错了吗?
(我知道我可以关闭验证,但我想解决问题,而不是绕过它)
答案 0 :(得分:16)
您的布尔值需要将nullable设置为true:
/**
* @var string $sale
*
* @ORM\Column(name="sale", type="boolean", nullable=true)
*/
private $sale = false;
答案 1 :(得分:6)
在面向对象的编程中,您应该使用实体的构造函数来设置属性的默认值:
public function __construct() {
$this->sale = false;
}
答案 2 :(得分:3)
我没有使用CRUD自动生成工具,但我知道默认情况下,每个字段都是必需的。你必须明确地将'required' => false
作为你的字段的选项。
这可以在表格类
中完成namespace Acme\DemoBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
class FooType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('field', 'text', array('required' => false));
}
public function getName()
{
return 'foo';
}
}
在控制器内生成的Form类中可以获得相同的内容
namespace Acme\DemoBundle\Controller;
use Acme\DemoBundle\Entity\Foo;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
class DefaultController extends Controller
{
public function newAction(Request $request)
{
// ...
$form = $this->createFormBuilder($foo)
->add('field', 'text', array('required' => false)
->getForm();
// ...
return $this->render('AcmeDemoBundle:Default:new.html.twig', array(
'form' => $form->createView(),
));
}
}
答案 3 :(得分:2)
您也可以使用'data'参数,如:
->add('date', 'date', array(
'widget' => 'single_text',
'format' => 'dd/MM/yyyy',
'attr' => array('class' => 'datepicker'),
'data' => new \DateTime()
))
这里我设置了一个类,使用JavaScript创建该字段的jQuery UI datepicker。 我还将小部件设置为single_text,因此我不会获得三个选择字段。 然后我将默认数据设置为当前的DateTime()
答案 4 :(得分:1)
或者在注释中 使用:
options={"default":"foo"}
而不是:
options={"default"="foo"}
例如:
/**
* @ORM\Column(name="foo", type="smallint", options={"default":0})
*/
private $foo;