1

我很困惑..我正在运行 Symfony2.3。

如果提交表单,我有一个控制器会转发到单独的控制器。

   if ($form->isValid()) {
         $response = $this->forward('MusicMBundle:Song:addTrackToSong', array(
            'Track'=>$Track,
            ));
         return $response;
   }

但是,可以看出,Track 参数通过这个转发传递给下面的(简化的)控制器,具有另一种形式。

    public function addTrackToSongAction(Request $request, $Track){
          if ($form->isValid()) {   
                //LOGIC
                return $this->redirect($this->generateUrl('MusicMBundle_homepage'));
          }
          return $this->render('MusicMBundle:Song:addtracktosong.html.twig', array(
               'Track' => $Track, 'form' => $form->createView(),
          ));

如果我 var_dump($Track) 在函数中的任何位置,它就存在并且正是我想要的。

但是,当提交第二个表单时,symfony2 会抛出以下错误:

Controller "Music\MBundle\Controller\SongController::addTrackToSongAction()" requires 
that you provide a value for the "$Track" argument (because there is no default value 
or because there is a non optional argument after this one).

坦率地说,我很困惑。我可以访问我需要的一切,但 symfony 对我很生气。我想问题可能出在我的转发策略中?

如果问题可能存在,这是我的路由文件:

MusicMBundle_Song_addTrackToSong:
pattern: /addTrackToSong
defaults: { _controller: MusicMBundle:Song:addTrackToSong }
requirements:
   _method: GET|POST

我是该框架的初学者,我只是不知道从哪里开始,也找不到任何东西。

如果我可以提供任何其他信息,请告诉我。

非常感谢!

4

2 回答 2

1

您的路线可能不正确,因为它没有参数。您可以尝试在路由中添加 Track 参数,方法是从以下更改路由文件中的模式:

pattern: /addTrackToSong

对此:

pattern: /addTrackToSong/{Track}

如果您访问 url /addTrackToSong/yourTrackValueSongController::addTrackToSongAction方法中的 $Track 将等于yourTrackValue

解决问题的另一种方法是在您的操作方法中为 $Track 设置默认值。

public function addTrackToSongAction(Request $request, $Track = null) {
于 2013-07-14T00:44:33.490 回答
-1

一种简单易行的解决方案是序列化和反序列化(经过现场测试)。它实际上将任何对象(也包括数组)转换为字符串并返回,因此您可以在 URL 中使用它。

将对象编码为字符串:

    $track_object_as_string = urlencode(base64_encode(gzcompress(serialize($Track))));

将字符串解码为对象:

    $Track = urldecode(unserialize(gzuncompress(base64_decode($track_object_as_string)));
于 2014-10-12T12:42:40.110 回答