drh47606 2019-05-15 12:44
浏览 54
已采纳

Symfony 4 - 如何将参数从表单传递给控制器

I am in troubles while trying to pass parameters from my form to my controller.

What I am trying to implement is a list of choices that will permit to display a list of users depending on parameters (role, ban ...).

The problem is I think that I don't get the parameter after submit to have my request in index. Could the problem be that I reder the same form in the same function before and after submitting ?

I tried putting href/onclick/ tags on my options but it didn't work.

index.html.twig

<form class="form-group" action="{{ path('user_index') }}">
            <table class="table">
                <tr>
                    <td>
                        <select class="custom-select">
                            <option selected="">Which users to you want to see ?</option>
                            <option value="1">All</option>
                            <option value="2">Students</option>
                            <option value="3">Teachers</option>
                            <option value="4">Admins</option>
                            <option value="5">Super Admin</option>
                            <option value="6">Banned</option>
                            <option value="7">Unbanned</option>
                        </select>
                    </td>
                    <td>
                        <input type="submit" value="Submit">
                    </td>
                </tr>
            </table>
        </form>
UserController.php

/**
     * Requires ADMIN_ROLE
     *
     * @Route("/", name="user_index", methods={"GET"})
     */
    public function index(Request $request): Response
    {
        $this->denyAccessUnlessGranted('ROLE_ADMIN');

        $ban = true;

        // trying to get the value of the option in form ?
        $value = $request->request->get('value');

        switch ($value){
            case 1 :
                $users = $this->getDoctrine()
                    ->getRepository(User::class)
                    ->findAll();
                break;
            case 6 :
                $users = $this->getDoctrine()
                    ->getRepository(User::class)
                    ->findByBan($ban);
                break;
            case 7 :
                $ban = false;
                $users = $this->getDoctrine()
                    ->getRepository(User::class)
                    ->findByBan($ban);
                break;
            default:
                $users = $this->getDoctrine()
                    ->getRepository(User::class)
                    ->findAll();
                break;
        }

        return $this->render('user/index.html.twig', [
            'title' => 'User Index',
            'headtitle' => 'View all the users list',
            'users' => $users,
        ]);
    }
  • 写回答

2条回答 默认 最新

  • dongnue2071 2019-05-15 12:54
    关注

    As I understand, the method of your form is a GET request. To retrieves $_GET variable using the HttpFoundation component you need to:

    1. Your select input should have a name.

    Example:

    <form class="form-group" action="{{ path('user_index') }}" method="get">
                <table class="table">
                    <tr>
                        <td>
                            <select class="custom-select" name="users">
                                <option selected="">Which users to you want to see ?</option>
                                <option value="1">All</option>
                                <option value="2">Students</option>
                                <option value="3">Teachers</option>
                                <option value="4">Admins</option>
                                <option value="5">Super Admin</option>
                                <option value="6">Banned</option>
                                <option value="7">Unbanned</option>
                            </select>
                        </td>
                        <td>
                            <input type="submit" value="Submit">
                        </td>
                    </tr>
                </table>
    </form>
    
    1. Try to fetch your request (GET) parameters by using $request->query->get('users')

    Check: Symfony Request Object

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?