Symfony 1.4表格使用Propel Object'<class here =“”>'not Found </class>

时间:2013-03-22 07:40:31

标签: php forms widget symfony-1.4 propel

从这个页面:

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();
}

1 个答案:

答案 0 :(得分:0)

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

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

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

这个答案是无用的(抱歉)或者你实际上并不意味着该操作将对象“保存”到数据库中 - 在这种情况下,检查来自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”,这可能是导致此问题的真正原因