从这个页面:
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();
}
答案 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”,这可能是导致此问题的真正原因