• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:symfonyでCSRFがうまく動かない)

symfonyでCSRFがうまく動かない

このQ&Aのポイント
  • symfony1.4にてフォーム作成中に、csfrの必須エラーが発生する問題があります。
  • バリデーションは正しく動作しており、他のバリデーションには問題がないようです。
  • フォームのhiddenフィールドに値が入らず、原因がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • winoo
  • ベストアンサー率100% (1/1)
回答No.2

もう解決済かもしれませんが actions.class.php にて -------------------------- $this->form->getCSRFToken(); -------------------------- とすると解決するみたいです。 私の場合は、即反映しなかったのでキャッシュクリアかなにか必要かもですが。 本件で解決できました。 ------------------------------------------------- in my case i solved it adding: $this->form->getCSRFToken(); //in my action.class function <?php echo $form['_csrf_token']->render(); ?> //in my template --------------------------------------------------

参考URL:
http://oldforum.symfony-project.org/index.php/t/17867/
hommerice
質問者

お礼

ご指摘の通り行ったところ、うまくいきました! とても困っていたので大変助かりました。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

symfonyはきちんと使ったことがないんですが、 少し調べてみたところ、下記のような記事がありました。 http://blog.asial.co.jp/604 config/settings.ymlファイル当たりに、 all: .settings: csrf_secret: myUniqueSecret といった記述を書く必要があるようですが、いかがですか。

hommerice
質問者

お礼

ご回答ありがとうございます。 > onfig/settings.ymlファイル当たりに、 > all: > .settings: > csrf_secret: myUniqueSecret こちらは設定してあります。 設定していないと <input type="hidden" name="club[_csrf_token]" id="club__csrf_token" /> のhiddenのタグも生成されないのですが、 私の場合はhiddenタグは生成されるのですが value値に値が設定されないという現象で悩んでおります。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • symfony 画面が表示されない

    こんにちは、 symfony入門したばかりのものですが、 http://codezine.jp/article/detail/704?p=4を 参考に、実際にサンプルを作っていたのですが 下記の部分を変更して(actions.class.phpなども変更) http://localhost/codezine/web/helloworldで いざ、WEB表示させてみると、「お名前をどうぞ」は表示されるのですが テキストボックスや、コマンドボタンが表示されません。 何か確認方法などはありますでしょうか。 indexSuccess.php---------------------------- <p>お名前をどうぞ。</p> <?php echo form_tag('helloworld/youkoso') ?> <?php echo input_tag('anatano_onamae', 'your name') ?> <?php echo submit_tag('Save') ?> </form>

  • ルートが通らない(laravel)

    php artisan route:listコマンドで見るとURIがedit/{id}で確認できるのですが 404エラーが出てNot foundになります。 エラーのurlはlocalhost:8000/%7B%7B%20url('user/edit/'.12)%7D%7Dと なります。 viewとweb.phpとcontrollerの該当箇所は下記の通りです。 (web.phpの部分) Route::post('/edit/{$id}',[KintaiController::class,'edit']) ->middleware('auth:users') ->name('edit'); (viewの部分) echo "<form action=\"{{ url('user/edit/'.$e_time->id)}}\" method=\"POST\">"; echo '<input type="hidden" name="_token" value="' . csrf_token() . '">'; echo "<button type=\"submit\" class=\"btn btn-primary\">更新</button>"; echo "</form>"; echo "</td>"; (controllerの部分) public function edit($id) { $kintaii = Kintai::findOrFail($id); // 取得した値をビュー「user/edit」に渡す return view('user/edit', compact('kintaii')); } index.blade.php内の編集ボタンを押すとuser/edit.blade.phpを呼び出すような仕様にしたいと思っています。 どうかよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • formヘルパーを使わないと、パラメータを取得できないのでしょうか?

    symfonyを使用してますが、 formヘルパーを使わないと、リクエストのパラメータを取得できないのでしょうか? --------------------------------------------------- <form action="/web/xx.php/xx/xxx" enctype="text/plain" method="post"> <input type="text" name="model" value="50"> <input type="submit" value="検索"> </form> --------------------------------------------------- 上記だと、パラメータを取得できるが、下記だと取得できる。 --------------------------------------------------- <?php echo form_tag('/web/xx.php/xx/xxx') ?> <?php echo input_tag("model","50") ?> <?php echo submit_tag('検索')?>

    • 締切済み
    • PHP
  • 【php】フォームの作成をもっと楽にできないものか

    phpで、フォームを作成する時 入力フォームの作成、データの受け渡し、バリデーション処理 これでよろしいですか?画面の作成、DBへのインサート、と 非常に手間がかかります。 フィールドが1個増えるだけでまた、また1個1個足していかないといけません。 フレームワーク(codeigniter)なんかも使ってみましたが バリデーション処理やセキュリティが補助されるだけで 基本的な手間は変わりません。 このPHPでのフォーム作成をもっと簡単に、直感的に作成できるような ツールや、ライブラリなんかはないものなのでしょうか?

    • ベストアンサー
    • PHP
  • symfonyのaskeetサイトのデモを動かそうとしたらエラーで悩んでいます、初心者なのでお力を貸してください

    PHPフレームワークsymfonyのaskeetサイトのデモを動かそうとしたらエラーでて悩んでいます、初心者なのでお力を貸してください 実行した手順は以下です。 1. C:\web\askeetフォルダを作成 2.symfony init-project askeetのコマンドを実行 3.symfony init-app frontendのコマンドを実行 4.httpd-vhosts.confの設定 NameVirtualHost *:80 #default area for new web projects <VirtualHost *:80> ServerName web DocumentRoot "C:\web" </VirtualHost> #original xampp location <VirtualHost *:80> ServerName localhost DocumentRoot "C:\xampp\htdocs" </VirtualHost> #allow access for the shared sf directory <Directory "C:\xampp\php\pear\data\symfony\web\sf"> Allow from All </Directory> #sample symfony project <VirtualHost *:80> ServerName askeet DocumentRoot "C:\web\askeet\web" DirectoryIndex index.php Alias /sf "C:\xampp\php\pear\data\symfony\web\sf" <Directory "C:\web\askeet"> AllowOverride All Order allow,deny Allow from All </Directory> </VirtualHost> 5. /etc/hostsの書換 127.0.0.1 askeet 6.http://askeet/にアクセスしてSymfony Project Createdの 画面を確認しました。 Q.つぎからが悩んでいるところです。 7.askeetのダウンロードを 以下のsubversionのリポジトリからチェックアウトしました。 http://svn.askeet.com 8..http://askeet/にアクセスすると以下のエラーが出ました。 <エラー内容> Warning: include(symfony/pear.php) [function.include]: failed to open stream: No such file or directory in C:\web\askeet\apps\frontend\config\config.php on line 14 Warning: include() [function.include]: Failed opening 'symfony/pear.php' for inclusion (include_path='.;C:\xampp\php\pear\') in C:\web\askeet\apps\frontend\config\config.php on line 14 Fatal error: Uncaught exception 'Exception' with message 'Unable to find symfony librairies' in C:\web\askeet\apps\frontend\config\config.php:16 Stack trace: #0 C:\web\askeet\web\index.php(8): require_once() #1 {main} thrown in C:\web\askeet\apps\frontend\config\config.php on line 16 PHPのフレームワークを初めて勉強しているので エラーの意味がよくわかりません。ヒントでもいいのでご教授ください。 よろしくお願いします

    • 締切済み
    • PHP
  • CakePHP2で複数のフォームを扱う方法

    1つのページで複数のフォームがある場合、 送られたきたフォームごとに、別々のプログラムを動かしたいのですが、 ifで分岐する場合に、条件となる適切なパラメータはありますか? View <div id="a"> <?php echo $this->Form->create('Test'); echo $this->Form->input('list_a'); echo $this->Form->input('list_b'); echo $this->Form->input('list_c'); echo $this->Form->end(); ?> </div> <div id="b"> <?php echo $this->Form->create('Test'); echo $this->Form->input('list_d'); echo $this->Form->input('list_e'); echo $this->Form->input('list_f'); echo $this->Form->end(); ?> </div>

    • ベストアンサー
    • PHP
  • 複数フォームについて

    こんばんは。 いま行き詰ってます(汗) 早速質問なんですが、三つのフォームを用意します。 <FORM method="POST" action=<?echo"xxx.php?1"?>> <INPUT type="submit" value="A" </FORM> <FORM method="POST" action=<?echo"xxx.php?2"?>> <INPUT type="submit" value="B" </FORM> <FORM method="POST" action=<?echo"xxx.php?3"?>> <INPUT type="submit" value="C" </FORM> 上記のHTMLを実行。 [A][B][C] Aを押すとxxx.php?1 Bを押すとxxx.php?2 Cを押すとxxx.php?2 と別々のアクションに行くはずだと思ったんですが.。 常にxxxx.php?1です(笑) これを、ABCそれぞれのボタンにアクションをつけたいんですが、 可能ですか?? ご教授お願い致します!!!

  • 現在PHPの勉強をしています。初心者のためご教授いただければと思います

    現在PHPの勉強をしています。初心者のためご教授いただければと思います。 メールフォームを作成しており、エラーチェックで困っています。 簡単に流れを説明しますとフォーム画面で入力をしてもらったら確認画面へと移行します。 ここでエラーがあった場合、confirm.phpにてエラーチェックをし、form.phpに戻り、エラーがなければ確認画面にて入力した、項目が表示されるようにしたいと思っています。 ソースは下記のとおりになります。 form.php ---------------------- */ <html> <body> <form action="confirm.php" method="post"> 名前:<input type="text" name="name" value="" /<?php echo $errmsg['name'] ;?><br> 内容:<textarea name="comment" rows="5" cols="40"></textarea><?php echo $errmsg['comment'] ;?><br> <input type="hidden" name="contact" value="form" /> <input type="submit" name="submit" value="確認" /> </form> </body> </html> confirm.php ---------------------- */ <?php $name = $_POST['name']; $comment = $_POST['comment']; if(isset ($_POST['contact'])) { $errmsg = array(); if(empty($name)){ $errmsg['name'] = '未入力'; } if(empty($comment)){ $errmsg['comment'] = '未入力'; } if (count($errmsg) != 0) { header("Location: index.php"); exit; } } ?> <html> <body> 名前:<?php echo $name; ?><br /> 内容:<?php echo $comment; ?><br /> </body> </html> としております。 if (count($errmsg) != 0) { header("Location: form.php"); exit; 上記のようにするとエラーチェックの表示がされません。 require(form.php);にするとform.phpが表示されるのですがURLを見るとconfirm.phpの状態になっております。 header("Location: form.php");を使用してのエラーチェックをしたいのですが、どのように記述したらよろしいのでしょうか? 上記の内容でどなたかご教授いただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • cakePHPでFormを使用したDBへの登録

    cakePHP初心者です。 ブラウザで入力画面→確認画面→完了画面と遷移して、 DBに入力した値を登録する基本の動きをさせたいのですが、 Controllerの動きが分かりません。 Viewのファイルを 入力画面:entry.ctp 確認画面:confirm.ctp 完了画面:complete.ctp とします。 1.SampleControllerからentryページを表示 public function entry(){ } 2.etntry.ctpでFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> 3.SampleControllerでconfirmメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ データを画面にセット? } } 4.confirm.ctpが表示され、登録ボタンを押すと完了画面にFormを作成 <?php echo $this->Form->create('Sample', array('action' => 'complete')) . PHP_EOL; ?> 5.SampleControllerでcompleteメソッドが呼ばれる public function confirm(){ if($this->request->is('post')){ バリデーションチェック後、DBに登録? } } この流れでよいのでしょうか。 完了画面のcompleteでバリデーションチェックを行うことに違和感を感じています。 仮にconfirmで実施するとしても、書き方が良く分かりません。 <?php echo $this->Form->create('Sample', array('action' => 'confirm')) . PHP_EOL; ?> と書いたら、3の処理とかぶってしまいますよね・・・? 説明分かりにくくてすみません・・・。 ネットで調べつつやっていたのですが、一連の流れをすべて書いたサイトに見当たらず、 途方に暮れています。 どなたかご教示お願いします。

    • 締切済み
    • PHP
  • CakePHP データベースを使わずに

    PHP 5.2.6 CakePHP 1.2 データベースを使わずにフォームを作成する場合 <?php echo $form->create('Contact', array('action'=>'entry', 'method'=>'post')))?> と記述するとデータベースに接続しようと、してしましす。 もちろんモデル側では、 var $useTable = false; としてるのですが、どのようにしたらよいのでしょうか? よろしくお願いいたします。