質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

解決済

Laravel postで送信しているのにgetエラー

Chandler_Bing
Chandler_Bing

総合スコア672

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

2回答

-1評価

1クリップ

19914閲覧

投稿2019/06/13 08:28

編集2019/06/14 07:44

お疲れ様です。先日のエラーですがミニプログラムを作成したので、添付します。

オリジナルのバリデートを作成しているクラス

php

<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Validator; class Test_ValidationServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { // } /** * Bootstrap services. * * @return void */ public function boot() { //特殊文字は許さない /*以下の条件に一致しない(特殊文字が含まれている)ときにエラー処理を行う*/ Validator::extend('invalid', function ($attribute, $value, $parameters, $validator) { $pattern = '-._~%:/?#[]@!$&\'()*+,;='; $pattern = preg_quote($pattern, '/'); $pattern = "/[^" . $pattern . "]/"; return preg_match($pattern, $value); }); //IDとパスワードはパスワードは英数字を含んだ16文字以下 Validator::extend('passid', function ($attribute, $value, $parameters, $validator) { return preg_match("/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]{5,16}+\z/i", $value); }); } }

ルートです

php

//テンプレであるコメントアウトは提示していません。 Route::get('/', 'TestController@basic1'); Route::post('/basic1', 'TestController@basic1Check'); Route::post('/basic2', 'TestController@basic2');

オリジナルのバリデートをルールに追加しています

php

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class TestRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'name' => 'required|invalid|', 'id' => 'passid', 'pass' => 'passid|different:id', ]; } public function messages() { return [ //名前のバリデーション 'name.required' => '名前の入力は必須です', 'name.invalid' => '名前に使用できない文字が含まれています', //idのバリデーション 'id.passid' => 'ログインIDは英数字を含んだ16文字以下で入力してください', //passのバリデーション 'pass.passid' => 'パスワードは英数字を含んだ16文字以下で入力してください', 'pass.different' => 'IDと同じパスワードは設定できません', ]; } }

コントローラーです

php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\TestRequest; class TestController extends Controller { //一番初めに呼ばれます public function basic1() { $hash = array( 'name' => null, 'id' => null, 'pass' => null, ); return view('tests.test_basic1')->with($hash); }   //test_basic1から送信された値がバリデートを通過したあとの処理です public function basic1Check(TestRequest $request) { $name = $request->name; $id = $request->id; $pass = $request->pass; //値を配列に格納し、分解します $basic1 = ['name' => $name, 'id' => $id, 'pass' => $pass]; //この値がtest_basic2のbuttonタグのvalueに入ります $basic1Str = implode(',', $basic1); return view('tests.test_basic2', ['basic1Str' => $basic1Str]); } public function basic2(Request $request) { //このifでbackボタンが押されたかどうか判断していま if (isset($request->basic1Str)) { $basic1 = explode(',', $request->basic1Str); $name = $basic1[0]; $id = $basic1[1]; $pass = $basic1[2]; $hash = array( 'name' => $name, 'id' => $id, 'pass' => $pass, ); return view('tests.test_basic1')->with($hash); } return view('tests.test_basic2'); } }

以下bladeです

blade

{{--一部抜粋です(test_basic1.php)--}} <form method="post" action="/basic1"> {{ csrf_field() }} <p>ナマエ</p> <input type="text" name="name" value="{{ old('name', $name) }}"> @if ($errors->has('name')) <span class="errormsg">{{ $errors->first('name') }}</span> @endif <p>ログインID</p> <input type="text" name="id" value="{{ old('id', $id) }}"> @if ($errors->has('id')) <span class="errormsg">{{ $errors->first('id') }}</span> @endif <p>パスワード</p> <input type="text" name="pass" value="{{ old('pass', $pass) }}"> @if ($errors->has('pass')) <span class="errormsg">{{ $errors->first('pass') }}</span> @endif <button type="submit" class="btn btn-primary mb-5">Next</button> </form>

blade

{{--一部抜粋です(test_basic2.php)--}} <form method="post" action="/basic2"> {{ csrf_field() }} <select id="inputReason" class="custom-select"> <option selected>Open this select menu</option> <option value="1">One</option> <option value="2">Two</option> <option value="3">Three</option> </select> <button type="submit">Next</button> <button type="submit" name="basic1Str" value="{{ $basic1Str }}">back</button> </form>

問題
①一番初めにurlに'/'のurlを打つ

②test_basic1.blade.php表示


test_basic1.balde.phpでバリデートを通過する値を入力(通過しない値でもきちんと画面に設定したエラーメッセージがでる。)

④通過するとtest_basic2.blade.phpを表示(backボタンのvalueにはtest_basic1で入力した値がきちんと入っていることは確認済みです)

⑤backボタンを押す

⑥test_basic1.blade.phpが表示され、先ほど入力した値がすでに入力済み(期待値)

⑦-1
バリデート通過する値を入力すると問題なくtest_basic2.blade.phpが表示される
⑦-2
バリデート通過しない値を入力すると以下のエラーが表示される

error

The GET method is not supported for this route. Supported methods: POST.

一番初めにtest_basic1.blade.phpでバリデートエラーを出してもtest_basic2.blade.phpからtest_basic1.blade.phpに戻ってきてバリデートエラーを出しても動きは同じだと思うのですが、何が問題でしょうか。

またバリデートクラスの作成は以下のサイトの方法と全く同じです。
Laravelのカスタムバリデーション

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

m.ts10806

2019/06/13 08:36

BasicRequestという独自の指定の情報なしに回答しろと言われても。 長くて載せられないのならせめて問題が再現する最小構成のコードを提示してください。 https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5 #2. エラーが再現する小さなプログラムを作る
m.ts10806

2019/06/13 08:39

>2ページ目から1ページ目に戻り、 どうやって戻っているのでしょうか。再現確認で提示すべきコードが抜けています。
fumifumi_60

2019/06/13 08:40

私の理解力の問題かもしれませんが 『エラー値を入力』というのが分からないです、 コードのどの辺の挙動なのか、教えていただけますか?
Chandler_Bing

2019/06/13 08:45

ミニプログラムを作成しコード再記載します。 諸事情により、かなり後になるか明日になるかのどちらがですが、その際はまたよろしくお願いします。
zushi0905

2019/06/13 08:52

戻るの意味がよく分かってないですけど、下のbladeでNextもbackも両方/basic2にpostしているのはなんででしょう?
m.ts10806

2019/06/13 08:53

たぶん埋もれるので、なかったことにして放置します。 これまでの経緯から本当にそのまま再現確認できるコードが提示されるか怪しいので。 (できるなら最初から提示している。これだけの質問書く時間が勿体ない)

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。