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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

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

Q&A

解決済

2回答

1521閲覧

withErrorsメソッドはなんのオブジェクトでしょうか?

toll_tree

総合スコア199

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Laravel 5

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

0グッド

0クリップ

投稿2019/07/07 11:02

編集2019/07/07 12:33

以下はマニュアルのバリデーションの処理を記載したコードですが、withErrorsメソッドはなんのオブジェクトのメソッドなのでしょうか...?
記載しましたリンクのページ(公式マニュアル)を見たのですが分からなかった為、質問させて貰いました。

<?php namespace App\Http\Controllers; use Validator; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class PostController extends Controller { /** * 新しいブログポストの保存 * * @param Request $request * @return Response */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); if ($validator->fails()) { return redirect('post/create') ->withErrors($validator) ->withInput(); } // ブログポストの保存処理… } }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/07 12:14 編集

マニュアル探せばわかることをわざわざ質問する理由をお答えください。 知って何をどうしたいのかも分かりません。(そこまで知りたいならコアソース読めって何人にも言われてるような内容じゃないでしょうか) ちなみに、オブジェクトが何のことか理解しているか怪しい初心者にどのような説明をしても根本的な理解を得られるわけがないので、無駄足になるということを自覚してください。 「丸投げ、問題課題を明記しない質問にどこまでここの回答者は答えるのか」という実験でしたら通報します。
m.ts10806

2019/07/07 12:18

>公式マニュアルを見たのですが分からなかった為 これを見ても本当に回答者側が意図したページを確認したかなんて誰もわかりませんよ。 「どこを見て」「何が」「どうわからなかったか」書かないと丸投げの問題・課題なしの状態からは抜け出せません。(自分が同じような質問受けたらどう感じる?)
m.ts10806

2019/07/07 12:21 編集

「質問するときのヒント」忘れてませんか。「自分は100回以上質問してきてから大丈夫だ」と思うのでしたらそれは大きな間違いです。むしろ100回以上質問してきて質問の質がどんどん下がってきているし、本当に今まで質問して解決にしている回答を本当に理解して解決しているのでしたら、質問する必要はないはずですよ。「なぜ今でもこんな質問しているのか」謎で仕方ありません。
sakura_hana

2019/07/07 13:02

1ページ見て分からないなら、別のページを見るのが自然な流れじゃないですかね。 あと、もしも「->」の意味が分からないなら、そう書いた方がいいと思います。 https://teratail.com/help/question-tips >2-1. 今置かれている状況を整理し、わかっている範囲とわからない範囲を明確にしましょう
toll_tree

2019/07/07 13:05

@sakura_hanaさん バリデーションに関するページを確認したのですが、分からなかった為質問に至りました。 別のページというのは、どのページを見れば解決につながるでしょうか?
sakura_hana

2019/07/07 13:47

マニュアルのバリデーションに関するページに書かれていないのは、「withErrorsは何のオブジェクトのメソッドか」という質問と、バリデーションには直接的な関係が無いからです。 では他に怪しい候補は何か?というと、 ・withErrorsの前後にくっついてる「->」が怪しい ・メソッドは通常、クラス内に存在するもの→このクラスそのものにメソッドが存在している?→自力実装はしていない→継承元である「Controller」が怪しい ・しかしこのクラス内のメソッドであるならば「$this」が付くはず→「->」の元にある「redirect」はそれ単体で存在している($thisが付いていない)→「redirect」が怪しい と推測出来ます。 あとは上記の「」で括ったものを1つ1つGoogle検索(キーワードは「php ->」とか「laravel redirect」とか)で調べていけばいいと思います。
toll_tree

2019/07/07 13:54

@sakura_hanaさん アドバイスどうもです。 やはりredirectが怪しいですね... 実はredirectが怪しいと思い、「var_dump(property_exists('Redirect, 'withErrors'))」としてみたのですが、falseが返ってきてしまいまして... Redirectクラスには存在しないのかな...?と思ったんですよね...
toll_tree

2019/07/07 13:58

でも冷静に考えると確かに、クラス内のメソッドですと、$thisが付きますし、Controllerではないですしね...
sakura_hana

2019/07/07 14:01 編集

であれば「redirectは本当にRedirectというクラスなのか?」を疑うべきでしょうね。 (なお「laravel redirect」で調べると正解が書いてあるマニュアルのページが出ますが、var_dumpを使って直接調べてしまうのもアリでしょう)
sakura_hana

2019/07/07 14:04

正確には「redirect()とは何か? そして何を返すのか?」ですね。
toll_tree

2019/07/07 14:18 編集

var_dump(redirect())としましたら、Redirectorオブジェクトを返していることが分かりました。 しかし、その中にwithErrorsメソッドは存在しませんでした。 ということは、バリデーションにてエラーが存在しなかった場合は、withErrorsメソッドはredirect()の返り値である、Redirectorオブジェクトには含まれない?ということですかね...?
sakura_hana

2019/07/07 14:31

おっと私も細かくマニュアルを見れていませんでした。正確には「redirect('post/create')とは何か? そして何を返すのか?」ですね。 もう面倒なのでリンクも貼っちゃいますね。 https://readouble.com/laravel/5.5/ja/responses.html
toll_tree

2019/07/07 14:45 編集

「redirect('post/create')」こちらのように引数にリダイレクト先を指定し、var_dumpしてみましたら、RedirectResponseを返していることが確認できました! その為に、Responseのリンクを貼って頂いてたんですね。ありがとうございます。 なんですが...やはりwithErrorsメソッドが見つかりません... な、何故なのでしょうか...
sakura_hana

2019/07/07 14:47

すっごいスルーしてましたが(使ったこと無かったんで)、property_existsではなくmethod_existsじゃないですかね? https://laravel.com/api/5.5/Illuminate/Http/RedirectResponse.html 上記リファレンスにはあるって書いてあるので、「自分の検査方法が間違っている」と想定する部分ですね。
toll_tree

2019/07/07 15:10 編集

リンクどうもです! マニュアルではなくこのような便利なサイトがあったのは知りませんでした... あ、本当ですね...method_existsでした...変数調べても仕方ないですよね... コントローラのアクションメソッド内で「var_dump(method_exists('RedirectResponse', 'withErrors'));」としてみましたが、結果はfalseとなってしまいました。貼って頂きましたリンクには、withErrorsメソッドの記述がありましたし、そこに関しては多分自分のコード内になんらかの間違いがあるだけですよね...
sakura_hana

2019/07/07 15:14

じゃあfunction_existsですかね。(クラスメソッドと関数ってどう違うのか不勉強なのでよく分かってないですが……) それか、'RedirectResponse'が「Illuminate/Http/RedirectResponse」であると認識されていないのかもしれません。この辺はPHPのマニュアル見てみてください。
toll_tree

2019/07/07 15:21 編集

分かりました。後は自分で調べてみようと思います。 ご丁寧にアドバイスくださり、ありがとうございました。
m.ts10806

2019/07/08 02:43

「「どこを見て」「何が」「どうわからなかったか」書かないと丸投げの問題・課題なしの状態からは抜け出せません。(自分が同じような質問受けたらどう感じる?)」 と指摘しましたが、「ページ見ました」だけで「本当に必要な箇所を見たか」までは伝わりませんよ。 見た上での理解度も分からないし、「分からなかった」だけだから「そもそも見たかどうか」すら怪しいです。今までの経緯からするとちゃんと見てない可能性の方が高いですし、回答者もそういう目で見ているという自覚は持ってください。 今回のsakura_hanaさんのように既に私以外にも何人も同じ指摘をしてくる人がでてきています。それはどういうことかお分かりでしょうか。 「分かりました。後は自分で調べてみようと思います。 ご丁寧にアドバイスくださり、ありがとうございました。」 とコメントを信じていいなら「誰のアドバイスも必要ない」ということになります。 口だけのことが非常に多いです。その定型句のような「ありがとう」は何度も見ました。
guest

回答2

0

教訓(私への戒めともいう)を兼ねての回答です。

1.調べても出て来ないということは、何かが間違っているということ。
何を間違えているか考えてみましょう。
「バリデーションに関するページを確認したが、分からなかった」→「本件はバリデーションとは無関係である」
と発想して、次のステップへ進みましょう。

2.検索の為のキーワードが分からない場合は推測しましょう。
・withErrorsの前後にくっついてる->が怪しい
・メソッドは通常、クラス内に存在するもの→このクラスそのものにメソッドが存在している?→自力実装はしていない→継承元であるControllerが怪しい
・しかしこのクラス内のメソッドであるならば$thisが付くはず→->の元にあるredirectはそれ単体で存在している($thisが付いていない)→redirectが怪しい

この辺の推測が出来れば、後は出て来たキーワードを調べていくだけで(質問することなく)解決も可能だと思います。

3.分からないなら分かるまで調べましょう。
例えば上記の->はLaravelではなくPHPの仕様なので、「Laravel ->」だと検索にヒットしません。
が、「php ->」なら解説ページが山程出ます。

Laravelの仕様については、まずマニュアルを見ましょう。
例えばマニュアルのバリデーションの右上にある虫眼鏡ボタン→「redirect」と入力して検索すると、HTTPレスポンスのページがトップに出て来ます。

4.実験する時は:元コードと同一のものを使いましょう。
思い込みは厳禁です。
redirect('post/create')の型を知りたいならばvar_dump(redirect('post/create'));とすべきです。
var_dump(redirect());でもダメで、無論「redirectはRedirect型だろう」と決め付けもいけません。
その為に裏を取る(正しいか確認する)のが「マニュアルやリファレンスを読む」ことです。

5.実験内容とマニュアルとの記述が違ったら
考えられる可能性は2つ。
・実験方法が違う
・マニュアルの記載が間違っている

これは質問しないと分からないかもしれませんが、「もしかしたら〇〇かもしれない(使っているメソッドが違うのかもしれない/メソッドは正しいが引数を間違えているのかもしれない/メソッドも引数も正しいが表示方法を間違えているのかもしれないetc)」と考えて、思い付く限りの内容を調べ尽くしてください。

マニュアルの方が間違っている場合は、調査の過程で「これはマニュアルが間違っている」という情報に当たると思います。
当たらない場合は英語の公式文献を確認してください。翻訳ミスの可能性もあります。

6.それでも質問する時は:分かっている部分と分からない部分を明確にしましょう。
ここまで調べてようやく「分からなかった」と言えます。
(大抵はこの過程のどこかで「別案が思い付かなかった」「間違いに気付かなかった」が故に「分からなかった」となるケースが多いですが)

なお、最初の->を知っていれば(理解していれば)一眼見ただけで『withErrorsは「redirect('post/create')の返り値であるオブジェクト」が持っているメソッドである』と分かります。
後はこのredirectが何かを調べればいいだけなので、分かっている人には「調べれば分かる問題を訊くな」と言われるのです。

私が質問へのコメントで「->を知っているか?」と最初に訊いたのはそんな意図もあります。
なので「分かっている部分と分からない部分を明確にしましょう」。
そして問われていることには過不足無く答えると解決が早まります。(私はわざとスルーしましたが)


上記の方法は今回の質問以外でも使えます。
(というか同じような内容を既に別質問で別の方が回答していると思います)

逆に言うと、これをしていないと「丸投げ質問」となります。
次回以降は改善されることを祈ります。

投稿2019/07/07 15:23

編集2019/07/07 15:27
sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

sakura_hanaさんにアドバイスを頂き、withErrorsメソッドが存在しているオブジェクトを特定することができました。
redirect('post/create')の返り値が、RedirectResponseオブジェクトだった為、method_existsにて、$a = redirect('/post/create');var_dump(method_exists($a, 'withErrors'));こちらのように検証してみましたらtrueとなった為、withErrorsがRedirectResponseオブジェクトに存在していることが、確認できました。

投稿2019/07/07 16:57

編集2019/07/07 16:59
toll_tree

総合スコア199

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/08 02:45 編集

この流れで既にそのsakura_hanaさんの回答がついているにも関わらず自己解決とするのは不自然かと思いますので低評価しています。( しかもその回答には無反応というところでもう1つ付けたいくらい ※私自身規約違反で別アカウント保持ということは絶対にしていませんので、「こいつ嫌い」以外にきちんと理由がある低評価ということを理解されないと、誰もアドバイスしなくなります。指摘ばかり受けたいのでしたらそのスタンスを続ければ良いでしょう。指摘すらもそのうちなくなります )
sakura_hana

2019/07/08 09:00

var_dump(method_exists('RedirectResponse', 'withErrors')); だと上手くいかなかったのは『'RedirectResponse'が「Illuminate/Http/RedirectResponse」であると認識されていない』という仮説が正しかった感じですかね。(method_existsのオートロードの仕組みをちゃんと把握していませんが) この回答自体は間違っていないので私は低評価は付けずにおきますが、何故低評価を多数受けているかを鑑みた方がよいかと思います。 そして問題に対する考え方・取り組み方は今回でお分かり頂けたと思うので、もう同レベルの質問はされないと思っています。……されませんよね? 信じてます!
m.ts10806

2019/07/08 09:19 編集

sakura_hanaさん たぶんこの質問者には全て「単なるお説教」としか捉えられないと思います。 全部が点で動かれている様子。 この質問の直後にこれです。https://teratail.com/questions/199253 私も他の回答者も「いやさっき言ったじゃん」ということがよくありました。 https://teratail.com/questions/195256 の直後とか(蛇足ですが、ベストアンサーの回答者はPHPでの活動がほとんどない方です) 私だけならまだしも指摘をする回答者が増えてきているにも関わらず、自身にとって不都合なコメントが入ってくるとスルーしてさっさと締めて何事もなかったかのように次にいくのを繰り返しています。 きちんと聞き入れて受け入れていたら今頃質問することもなく指摘や説教も受けることもなく、自分でできるようになっているはずなのに、わざわざ茨の道を歩むことを選択しているので、仕方ないですね。
sakura_hana

2019/07/08 09:36

mts10806さん この人については知ってます。前から時々見てました。 まぁでもここまで丁寧に手取り足取りやったし、一応応答もしてくれたし、私は初めて絡む人だし、聞いてもらえるかなーと思いまして。method_existsの使い方は調べたっぽいのでやれば出来るんだとは思います。 あとmts10806さんのことは故意に無視しているようですから忠告するだけ無駄なんじゃないかとも思います(ベストアンサー付けたのはもう面倒臭くなったのでしょう)。それこそmts10806さんが茨の道を歩むことは無いと思うので、そのリソースを別の方の回答に向けてあげるべきかと思います。(私も多分もうしませんw)
m.ts10806

2019/07/09 07:51 編集

sakura_hanaさん 助言ありがとうございます。私の得意領域にがっつり被ってるので悩ましいところですね。 こうやってどんどん相手してくれる人がどんどん減っていくわけですよね。 「どうせ誰か構ってくれるし」と思ってると必ず痛い目を見ますね。 時々触られているとはいえ、Unity総合1位の方がPHP(のLaravel)見てるだけでも結構なことだと思うんですけど。。 toll_treeさん 反応しないだけでチラ見程度はしてそうなので、前も言ったこと書いておきますが、 今のやり方を続ける限り回答者はどんどん離れていきます。 「こんな人がこんな苦言を」と思う人がどんどん苦言をぶつけてきています(今回のsakura_hanaさんもいい例)。 それがどういうことか真剣に考えたほうがいいです。 考えられないなら無料のQAサイトとはさっさとおさらばしてメンターにでもなんでも 弟子入りしてしっかり授業料払ってマンツーマンで教えを乞うたほうが何万倍も有益です。 あなたに必要なのは「誰かどうか教えて」ではなく、ペアプロしてくれる先生です。 質問サイトでどうにかできるようなやり方をほとんどしてませんよ。 「他の順調に解決して成長できている質問者」を見てみると良いです。 あなたのようなやり方をしている質問者はなぜか一定数いますが、成長の「せ」の字すら届いていません。 むしろどんどん落ちていっている。 ※ただしteratailでのあなたの活動を見ると「お金もらっても教えたくない」というメンターはそれなりにいそうです  家庭教師とかもそうだと思いますけど、メンターも本当に欲しいのはお金ではなく教えた人がきちんと成長しているという実感であることがほとんどなので。 何を目標としているか知らないですが、QAサイトはやめたほうがいいです。 自分の現在地をちゃんと測れない人には向かないし成長しません。 ではでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問