0

从这个页面:

main_dev.php/player/new

到(当我点击提交时):

main_dev.php/player/edit/player_id/(no id)

如果我在这里放一个 id 它显示得很好。

当我单击提交按钮(以某种方式保存)但显示以下内容时:

404 | 未找到 | sfError404Exception

对象播放器不存在()。

这是我的基本形式:

$this->setWidgets(array(
  'player_id'      => new sfWidgetFormInputHidden(), //primary key auto increment()
  'player_name'    => new sfWidgetFormInputText(),
  'player_gold'    => new sfWidgetFormInputText(),
  'chara_id'       => new sfWidgetFormInputText(),
  'open_social_id' => new sfWidgetFormInputText(), 
));

我怀疑这里的问题是 player_id 没有显示并且是自动递增的。这意味着当我提交表单时 player_id 留空,并且由于 symfony 无法找到从哪里获取 id 以显示记录的引用,它会变为 404,有什么解决方法吗?

我的 action.class 是默认的(我生成它时的实例)所以我认为这不是问题

这是保存表单的代码:

    protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $Player = $form->save();
      $this->redirect('player/edit?player_id='.$Player->getPlayerId());
    }
  }

当然对于新的页面控制器:

public function executeNew(sfWebRequest $request)
{
    $this->form = new PlayerForm();
}
4

1 回答 1

0

如果 POST 请求保存了一个新的 Player 对象(在数据库中),则它不是您的 BasePlayerForm.class,也不是提交 url。

如果您的路由在手动输入时有效,而不是在操作类中调用时无效,那么您的 routing.yml 可能不是问题。

如果您没有覆盖configure()BasePlayerForm.class.php(在 PlayerForm.class.php 或其他任何地方),那么它不在您的 lib/form/ 类中。

要么这个答案没用(对不起),要么你实际上并不意味着该操作将对象“保存”到数据库中 - 在这种情况下,请检查来自 newSuccess 模板的提交 url/请求;还要验证您的路由:

您的 newSuccess.php 表单标记操作应该 POST 到 main_dev.php/player: <form method="post" action="/main_dev.php/player"> [并将 html 中呈现的 id 传递为<input type="hidden" name="player[player_id]" id="player_id" />.] 最后,url 中的编辑路由通常会匹配player/:player_id/edit- 检查您是否真的有一个自动创建的“id " 除了“player_id”之外,您的架构/数据库中的列可能确实是造成这种情况的原因。

于 2013-03-22T11:26:08.867 回答