Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2,如何将数组作为参数传递给控制器操作?_Symfony_Routes - Fatal编程技术网

Symfony2,如何将数组作为参数传递给控制器操作?

Symfony2,如何将数组作为参数传递给控制器操作?,symfony,routes,Symfony,Routes,如何使用Symfony 2将数组作为参数传递给控制器操作?请您写一个例子,如何定义路由,其中包含未知长度数组作为参数。例如url:其中标记的数量从0到100不等。 也是此路由的示例控制器,其中操作返回标记数组的值 使用以下编码(请参见下面的routing.yml和controller.php),我得到了错误: Catchable Fatal Error: Argument 3 passed to Symfony\Component\Routing\Route::__construct() mus

如何使用Symfony 2将数组作为参数传递给控制器操作?请您写一个例子,如何定义路由,其中包含未知长度数组作为参数。例如url:其中标记的数量从0到100不等。 也是此路由的示例控制器,其中操作返回标记数组的值

使用以下编码(请参见下面的routing.yml和controller.php),我得到了错误:

Catchable Fatal Error: Argument 3 passed to Symfony\Component\Routing\Route::__construct() must be of the type array, string given, called in C:\Bitnami\wampstack-5.5.30-0\sym_prog\dctr\vendor\symfony\symfony\src\Symfony\Component\Routing\Loader\YamlFileLoader.php on line 147 and defined in C:\Bitnami\wampstack-5.5.30-0\sym_prog\dctr\app/config\routing.yml (which is being imported from "C:\Bitnami\wampstack-5.5.30-0\sym_prog\dctr\app/config/routing_dev.yml").
网址:

以下是迄今为止我尝试过的路由和控制器文件的不同组合:

//版本r1,routing.yml

blog_post_tags:
    path: blog/post/{tags}
    defaults: { _controller: DefaultController:list_postsByTagActionQ }
    requirements:
        tags : "[a-zA-Z0-9,]+"
blog_post_tags:
    resource: "@BlogBundle/Controller/"
    type:     annotation
    prefix:   /blog/
    defaults: { _controller: DefaultController:list_postsByTagActionQ } 
blog_post_tags:
    path: blog/post/{tags}
    defaults: { _controller: DefaultController:list_postsByTagActionQ }
//版本r2,routing.yml

blog_post_tags:
    path: blog/post/{tags}
    defaults: { _controller: DefaultController:list_postsByTagActionQ }
    requirements:
        tags : "[a-zA-Z0-9,]+"
blog_post_tags:
    resource: "@BlogBundle/Controller/"
    type:     annotation
    prefix:   /blog/
    defaults: { _controller: DefaultController:list_postsByTagActionQ } 
blog_post_tags:
    path: blog/post/{tags}
    defaults: { _controller: DefaultController:list_postsByTagActionQ }
//版本r1,2-c1,controller.php

//http://localhost:8000/blog/post/?tags=[tag1,tag2] .
/**
 * @Route("/posts/{tags}")
 * @Template()
 */
public function list_postsByTagAction($tags){
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ1(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter       
    var_dump($tags);
    return array('posts'=>['post1','post2']);
} 
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ3(Request $request, $tags){           
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
 public function list_postsByTagActionQ(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter
      var_dump($tags);
}
..
    /**
     * Displays a form to edit an existing User entity.
     *
     * @Route("/{id}/edit", name="user_edit")
     * @Method({"GET", "POST"})
     */
    public function editAction(Request $request, User $user)
    {
..
 $bredArr=array( 'user_edit' => array (  'id'=>$user->getId() ) );
..
        return $this->render( 'MeetingBundle::user/edit.html.twig', array(
            'user' => $user,
            'edit_form' => $editForm->createView(),
            'image_form' => $imageForm->createView(),
            'delete_form' => $deleteForm->createView(),
            'bredArr'=>$bredArr,
        ));
//版本r1,2-c2,controller.php

//http://localhost:8000/blog/post/?tags=[tag1,tag2] .
/**
 * @Route("/posts/{tags}")
 * @Template()
 */
public function list_postsByTagAction($tags){
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ1(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter       
    var_dump($tags);
    return array('posts'=>['post1','post2']);
} 
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ3(Request $request, $tags){           
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
 public function list_postsByTagActionQ(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter
      var_dump($tags);
}
..
    /**
     * Displays a form to edit an existing User entity.
     *
     * @Route("/{id}/edit", name="user_edit")
     * @Method({"GET", "POST"})
     */
    public function editAction(Request $request, User $user)
    {
..
 $bredArr=array( 'user_edit' => array (  'id'=>$user->getId() ) );
..
        return $this->render( 'MeetingBundle::user/edit.html.twig', array(
            'user' => $user,
            'edit_form' => $editForm->createView(),
            'image_form' => $imageForm->createView(),
            'delete_form' => $deleteForm->createView(),
            'bredArr'=>$bredArr,
        ));
//版本r1,2-c3,controller.php

//http://localhost:8000/blog/post/?tags=[tag1,tag2] .
/**
 * @Route("/posts/{tags}")
 * @Template()
 */
public function list_postsByTagAction($tags){
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ1(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter       
    var_dump($tags);
    return array('posts'=>['post1','post2']);
} 
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ3(Request $request, $tags){           
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
 public function list_postsByTagActionQ(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter
      var_dump($tags);
}
..
    /**
     * Displays a form to edit an existing User entity.
     *
     * @Route("/{id}/edit", name="user_edit")
     * @Method({"GET", "POST"})
     */
    public function editAction(Request $request, User $user)
    {
..
 $bredArr=array( 'user_edit' => array (  'id'=>$user->getId() ) );
..
        return $this->render( 'MeetingBundle::user/edit.html.twig', array(
            'user' => $user,
            'edit_form' => $editForm->createView(),
            'image_form' => $imageForm->createView(),
            'delete_form' => $deleteForm->createView(),
            'bredArr'=>$bredArr,
        ));
//版本r3,routing.yml

blog_post_tags:
    path: blog/post/{tags}
    defaults: { _controller: DefaultController:list_postsByTagActionQ }
    requirements:
        tags : "[a-zA-Z0-9,]+"
blog_post_tags:
    resource: "@BlogBundle/Controller/"
    type:     annotation
    prefix:   /blog/
    defaults: { _controller: DefaultController:list_postsByTagActionQ } 
blog_post_tags:
    path: blog/post/{tags}
    defaults: { _controller: DefaultController:list_postsByTagActionQ }
//版本r3-c4,controller.php

//http://localhost:8000/blog/post/?tags=[tag1,tag2] .
/**
 * @Route("/posts/{tags}")
 * @Template()
 */
public function list_postsByTagAction($tags){
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ1(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter       
    var_dump($tags);
    return array('posts'=>['post1','post2']);
} 
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ3(Request $request, $tags){           
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
 public function list_postsByTagActionQ(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter
      var_dump($tags);
}
..
    /**
     * Displays a form to edit an existing User entity.
     *
     * @Route("/{id}/edit", name="user_edit")
     * @Method({"GET", "POST"})
     */
    public function editAction(Request $request, User $user)
    {
..
 $bredArr=array( 'user_edit' => array (  'id'=>$user->getId() ) );
..
        return $this->render( 'MeetingBundle::user/edit.html.twig', array(
            'user' => $user,
            'edit_form' => $editForm->createView(),
            'image_form' => $imageForm->createView(),
            'delete_form' => $deleteForm->createView(),
            'bredArr'=>$bredArr,
        ));

嗯,经过一些尝试,我找到了下一个解决方案

您可以将布线模式更改为此(标记:“[a-zA-Z0-9/]+”):


然后可以通过,但仍然需要explode()来获取参数。

最后,我找到了答案。与其传递数组,不如将其编码为json字符串。下面是一个例子:

C:\Bitnami\wampstack-5.5.30-0\sym\u prog\proj3\u 27\src\MeetingBundle\Controller\UserController.php

//http://localhost:8000/blog/post/?tags=[tag1,tag2] .
/**
 * @Route("/posts/{tags}")
 * @Template()
 */
public function list_postsByTagAction($tags){
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ1(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter       
    var_dump($tags);
    return array('posts'=>['post1','post2']);
} 
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
/**
 * @Route("/posts/{tags}")
 * @Method("GET")
 * @Template()
 */
public function list_postsByTagActionQ3(Request $request, $tags){           
    var_dump($tags);
    return array('posts'=>['post1','post2']);
}
//url http://localhost:8000/blog/post/?tags=[tag1,tag2]
 public function list_postsByTagActionQ(Request $request){
    $tags=$request->query->get('tags'); // get a $_GET parameter
      var_dump($tags);
}
..
    /**
     * Displays a form to edit an existing User entity.
     *
     * @Route("/{id}/edit", name="user_edit")
     * @Method({"GET", "POST"})
     */
    public function editAction(Request $request, User $user)
    {
..
 $bredArr=array( 'user_edit' => array (  'id'=>$user->getId() ) );
..
        return $this->render( 'MeetingBundle::user/edit.html.twig', array(
            'user' => $user,
            'edit_form' => $editForm->createView(),
            'image_form' => $imageForm->createView(),
            'delete_form' => $deleteForm->createView(),
            'bredArr'=>$bredArr,
        ));
C:\Bitnami\wampstack-5.5.30-0\sym\u prog\proj3\u 27\src\MeetingBundle\Controller\ImageController.php

C:\Bitnami\wampstack-5.5.30-0\sym\u prog\proj3\u 27\src\MeetingBundle\Resources\views\user\edit.html.twig

{# dispplays user, user_delete and image uplaod forms, also shows images which belongs to user, retrieving them via ManyToMany realation in User entity field "imgsuni" #}
 {% for img in user.imgsuni %}
 <br> {% include 'MeetingBundle:user:userimg.html.twig' %}
 {% endfor %}
{#显示用户、用户删除和图像上传表单,还显示属于用户的图像,通过用户实体字段“imgsuni”#中的许多实现来检索这些图像
{user.imgsuni%中的img为%1}

{%include'MeetingBundle:user:userimg.html.twig%} {%endfor%}
C:\Bitnami\wampstack-5.5.30-0\sym\u prog\proj3\u 27\src\MeetingBundle\Resources\views\user\userimg.html.twig

<img src="{{ asset( 'bundles/meeting/images/uploads/'~img.path~'' ) }}" height="100" />
<br><a href="{{  path('image_deletenf', { 'id': img.id,  'bredArrJ' : bredArr|json_encode }) }}"> Delete image </a>
"{{ img.title }}".


“{{img.title}}”。

$bredArr是在
User
controller
edit\u User
操作中创建的变量。它用作路径变量
image\u deletenf
中的参数。我不知道如何将其作为数组传递,但如果编码为Json字符串,它就可以工作。我需要
image\u deletenf
操作,以便能够重定向到我想要的路径。我可以从用户、事件和注释实体中删除图像,因此在删除后,我希望返回到用户、事件或注释,而不是默认的图像索引,因此我需要此
$bredArr
以使用正确的参数指向正确的实体

看这个例子,我需要routing.yml和controller.phpvalues,而不是我问题表单中的参数。我已经删除了所有要求,但我得到了相同的错误。您的文件是否保存在utf-8中?可能在“需求”键后有不可见字符。。像断线?尝试删除需求并从头开始重新编写。版本r2和版本r3没有requirements@olga所以,您总是会得到错误“可捕获致命错误:参数3传递给Symfony\Component\Routing\Route::\uu construct()…”?