0

このページから:

main_dev.php/player/new

to(送信をクリックしたとき):

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

ここにIDを入力すると、正常に表示されます。

送信ボタンをクリックすると(どういうわけか保存されます)、次のように表示されます。

404 | 見つかりません| sfError404Exception

Object Playerは存在しません()。

これは私のベースフォームです:

$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 フォーム タグ アクションは、main_dev.php/player に POST する必要があります: <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 に答える