为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Symfony 实体中从数组中进行选择

如何在 Symfony 实体中从数组中进行选择

PHP
郎朗坤 2022-10-14 15:51:19
我是 symfony 的新手,还在学习,我的问题是如何在一个包含静态选项数组的表单中填充选择下拉列表。假设我有一个名为 Cake 的类,我希望能够从在同一个 CakeEntity 中创建status的Cake数组中填充一个下拉列表:statuses<?phpnamespace App\Entity;use Doctrine\ORM\Mapping as ORM;/** * @ORM\Entity(repositoryClass="App\Repository\CakeRepository") */class Cake{    /**     * @ORM\Column(type="string", length=50)     */    private $status;    private $statuses = array(        'not_ready' => 'Not Ready',        'almost_ready' => 'Almost Ready',        'ready'=>'Ready',        'too_late'=>'Too late'    );    public function getStatus(): ?string    {        return $this->status;    }    public function setStatus(string $status): self    {        $this->status = $status;        return $this;    }    public function getStatuses()    {       return $this->statuses;    }}我的控制器看起来像:namespace App\Controller;use App\Entity\Cake;use App\Form\CakeType;use App\Repository\CakeRepository;use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;use Symfony\Component\HttpFoundation\Request;use Symfony\Component\HttpFoundation\Response;use Symfony\Component\Routing\Annotation\Route;/** * @Route("/cake") */class CakeController extends AbstractController{    /**     * @Route("/new", name="cake_new", methods={"GET","POST"})     */    public function new(Request $request): Response    {        $cake = new Cake();        $form = $this->createForm(CakeType::class, $cake);        $form->handleRequest($request);        if ($form->isSubmitted() && $form->isValid()) {            $cake->setCreatedAt(\DateTime::createFromFormat('d-m-Y', date('d-m-Y')));            $cake->setCreatedBy(1);            $entityManager = $this->getDoctrine()->getManager();            $entityManager->persist($cake);            $entityManager->flush();            return $this->redirectToRoute('cake_index');        }        return $this->render('cake/new.html.twig', [            'cake' => $cake,            'form' => $form->createView(),        ]);    }
查看完整描述

1 回答

?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您可以声明getStatuses为Cake,static或使用公共常量。例如:


class Cake

{

    // with static variables


    private static $statuses = [

        'not_ready'    => 'Not Ready',

        'almost_ready' => 'Almost Ready',

        'ready'        => 'Ready',

        'too_late'     => 'Too late',

    ];


    public static function getStatuses()

    {

        return self::$statuses;

    }


    // or with public const


    public const STATUSES = [

        'not_ready'    => 'Not Ready',

        'almost_ready' => 'Almost Ready',

        'ready'        => 'Ready',

        'too_late'     => 'Too late',

    ];

}

这似乎是合理的,因为返回值不是实例而是特定于类的。


然后你可以使用:


public function buildForm(FormBuilderInterface $builder, array $options)

{

    $builder->add('status', ChoiceType::class, [

        'choices'=> Cake::getStatuses(),

    ]);


    // or


    $builder->add('status', ChoiceType::class, [

        'choices'=> Cake::STATUSES,

    ]);

}

如果选择实际上取决于给定的 Cake 实例,您可以通过选项数组或使用表单事件传递它。


查看完整回答
反对 回复 2022-10-14
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号