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

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

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

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

PHP

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

Laravel 5

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

Q&A

解決済

2回答

418閲覧

ルーティングの際のwhereメソッドについて

toll_tree

総合スコア199

Laravel

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

PHP

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

Laravel 5

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

2グッド

1クリップ

投稿2019/06/08 10:26

laravelを学習していた際のことなのですが、ルーティングで使用される「whereメソッド」について、お聞きしたい点があります。

php

1<?php 2 3/* 4|-------------------------------------------------------------------------- 5| Web Routes 6|-------------------------------------------------------------------------- 7| 8| Here is where you can register web routes for your application. These 9| routes are loaded by the RouteServiceProvider within a group which 10| contains the "web" middleware group. Now create something great! 11| 12*/ 13 14Route::get('/', 'PostsController@index'); 15// Route::get('/posts/{id}', 'PostsController@show'); 16Route::get('/posts/{post}', 'PostsController@show')->where('post', '[0-9]+'); 17Route::get('/posts/create', 'PostsController@create');

上記のwhereメソッドなのですが、laravelの公式マニュアルで調べていたのですが、Illuminate\Support\Collectionクラスのwhereメソッドしか見当たりませんでした。
Illuminate\Support\Collectionクラスのwhereメソッドであるとするならば、ファイルに「use Illuminate\Support\Collection」として、使用しなければならないと思った為、Collectionクラスのメソッドではないのではないかと思いました。
whereメソッドにつきまして、ご存じの方いましたら教えてください。
よろしくお願いします

newyee👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

見ている公式マニュアルがどんなものか分からないけど、
もしもそこまで調べる気があるのならまずはAPIドキュメントを見る。するとwhereの使い方が書いてある。
更に下のほうまで行くと、Routeにはどんなメソッドが定義されているかの紹介をするリンク先まである
https://laravel.com/api/5.7/Illuminate/Routing/Route.html#method_where
これを見ると、URL見るだけでもCollectionじゃないんだなーって事は分かる

理解しようとしている事に対して水差されるのは嫌かもしれないけど、とりあえずwhereをAPIドキュメントの説明通りに使う、それで対処しきれなくなったら仕方ないのでコアのソースとかを読む、って感じにした方が楽ですよ

投稿2019/06/08 10:46

hentaiman

総合スコア6421

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

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

toll_tree

2019/06/08 10:56

ご回答ありがとうございます。 laravelの公式マニュアルのようなサイトってAPIドキュメントっていうんですね... いえ、調べ方などを提示頂けれるのは助かります。 ドキュメントの方調べてみたいと思います
hentaiman

2019/06/08 11:01

いやいや、名称は公式マニュアルでもAPIドキュメントでも良いんだけど、『公式マニュアル調べてもRouteのWhereがよく分からない』と書いてあったので、whereの説明の無いマニュアルサイトが存在してるんだろうと思って回答しただけです 公式マニュアルと書くだけでなくリンクも一緒に貼っといてくれたらより分かりやすくていいんだけど
toll_tree

2019/06/08 11:03

次回質問する際は、リンクも貼っておこうと思います
m.ts10806

2019/06/08 11:06

間違った理解をされては困るので横から失礼しますが、 リンクされているreadouble.comのほうは「川瀬裕久さんという有志が作っている日本語訳ドキュメント」ですよ。 Footerのコピーライト参照。 URLのjaをenにかえたら英語原文がでてきますがそちらはLaravelの制作者であるTaylor Otwell氏がコピーライトされています。 本当の公式は2つ目のリンクがされていない https://laravel.com/https://laravel.com/docs/5.8 の方。 「APIドキュメント」はあくまで「規約説明書(仕様書)」という意味合いで使われるので、 「あれはAPIドキュメントと言うよ」とそのまんま言葉だけで覚えると恥かきます。
hentaiman

2019/06/08 11:10

言葉気にせず書いててすいません
m.ts10806

2019/06/08 11:21 編集

あいえ、hentaimanさんへの指摘ではないです。 「hentaimanさんはAPIドキュメントという単語はこういう意味で使っているわけであって固有名詞ではないよ」と補足したかっただけです。 (丁寧な解説をしても、読んでも、間違った解釈をし続ける質問者のほうが問題ありとおおよその人は見ます) それに出展の提示がないのは今に始まったことではなく、以前から指摘され続けていることなので。
m.ts10806

2019/06/08 11:23

あと、私に限らず指摘のコメントが増えて自分の都合が悪くなってきたら「理解できたことにして」締めてしまうところとか、お世辞にもいいとは言えません。
hentaiman

2019/06/08 20:43

最近の他の質問では結構コメントで何回も質問重ねていたので、「理解できた"ことにして"」たわけではなく「理解できた」と思っているんだと思う。これは予想だけど、テストコードをいくつも書いて動作の確認をするということをしていないんでしょうね。だから「理解できた"つもり"」になってしまうのかなと思う
m.ts10806

2019/06/08 20:57

失敗して覚えることが多いですよね。プログラミングはエラーとデバッグの繰り返しで試行錯誤を続けていくものと思います。 プログラミングは目よりも頭と手を使わないと…。 この質問者はあまりにも「思った」が多すぎますね。書いた通りにしか動かないのに。滅茶苦茶なコード書いて動かせばエラーはいて教えてくれるのに。
hentaiman

2019/06/08 22:10

自分も以前マニュアル読めって回答した事あるけれど、今はマニュアル見て頑張っているようなので良くなってると思います。しかしlaravelマニュアル読むには読めるだけのphp自体の技術力は必要なので躓くのでしょうけど。 mtsさんが以前コメントしていたように、laravelなんて使わないで素のphpとhtmlだけで書いていくところから始めたら伸びそうなタイプには見えるんですけどねえ
m.ts10806

2019/06/08 22:57 編集

>laravelマニュアル読むには読めるだけのphp自体の技術力は必要なので躓くのでしょうけど。 ここですね。 内部でどういう処理をしているかある程度イメージがつけられれば(あと何かあればコアソースを読んでいけるくらいの検証能力があれば)仕様として飲み込めるんでしょうけど、必要な土台や基礎がないとただ混乱してとりあえず何が問題か分からないまま丸投げてしまう感じになってしまいますね。 せめて「PHP本来の機能」なのか「Laravelで構築された機能」なのかの区別くらいはつけられるようにならないとずっとこのままのように思います。 PHPやLaravelを学習する目的は分からないですけど、今のやり方を見ていると現場では使いづらいですね。
guest

0

RouteクラスのDOCを見る限り、where を持つのは、\Illuminate\Routing\RouteRegistrar です。

php

1<?php 2 3namespace Illuminate\Support\Facades; 4 5/** 6 * @method static \Illuminate\Routing\Route get(string $uri, \Closure|array|string|callable|null $action = null) 7 * @method static \Illuminate\Routing\Route post(string $uri, \Closure|array|string|callable|null $action = null) 8 * @method static \Illuminate\Routing\Route put(string $uri, \Closure|array|string|callable|null $action = null) 9 * @method static \Illuminate\Routing\Route delete(string $uri, \Closure|array|string|callable|null $action = null) 10 * @method static \Illuminate\Routing\Route patch(string $uri, \Closure|array|string|callable|null $action = null) 11 * @method static \Illuminate\Routing\Route options(string $uri, \Closure|array|string|callable|null $action = null) 12 * @method static \Illuminate\Routing\Route any(string $uri, \Closure|array|string|callable|null $action = null) 13 * @method static \Illuminate\Routing\Route match(array|string $methods, string $uri, \Closure|array|string|callable|null $action = null) 14 * @method static \Illuminate\Routing\RouteRegistrar prefix(string $prefix) 15 * @method static \Illuminate\Routing\RouteRegistrar where(array $where) 16 * @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = []) 17 * @method static \Illuminate\Routing\PendingResourceRegistration apiResource(string $name, string $controller, array $options = []) 18 * @method static void apiResources(array $resources) 19 * @method static \Illuminate\Routing\RouteRegistrar middleware(array|string|null $middleware) 20 * @method static \Illuminate\Routing\Route substituteBindings(\Illuminate\Support\Facades\Route $route) 21 * @method static void substituteImplicitBindings(\Illuminate\Support\Facades\Route $route) 22 * @method static \Illuminate\Routing\RouteRegistrar as(string $value) 23 * @method static \Illuminate\Routing\RouteRegistrar domain(string $value) 24 * @method static \Illuminate\Routing\RouteRegistrar name(string $value) 25 * @method static \Illuminate\Routing\RouteRegistrar namespace(string $value) 26 * @method static \Illuminate\Routing\Router|\Illuminate\Routing\RouteRegistrar group(array|\Closure|string $attributes, \Closure|string $routes) 27 * @method static \Illuminate\Routing\Route redirect(string $uri, string $destination, int $status = 302) 28 * @method static \Illuminate\Routing\Route permanentRedirect(string $uri, string $destination) 29 * @method static \Illuminate\Routing\Route view(string $uri, string $view, array $data = []) 30 * @method static void bind(string $key, string|callable $binder) 31 * @method static void model(string $key, string $class, \Closure|null $callback = null) 32 * @method static \Illuminate\Routing\Route current() 33 * @method static string|null currentRouteName() 34 * @method static string|null currentRouteAction() 35 * 36 * @see \Illuminate\Routing\Router 37 */ 38class Route extends Facade 39{ 40 /** 41 * Get the registered name of the component. 42 * 43 * @return string 44 */ 45 protected static function getFacadeAccessor() 46 { 47 return 'router'; 48 } 49}

投稿2019/06/08 10:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

toll_tree

2019/06/08 10:36

ご回答ありがとうございます。 公式マニュアルには「\Illuminate\Routing\RouteRegistrar」こちらのクラスのwhereメソッドに関する説明などがされているページは存在しますでしょうか?
toll_tree

2019/06/08 11:00

本当ですね。 正規表現制約という欄に書いてありました。 一点だけ疑問に思ったのですが、マニュアルのこちらの部分「ルートインスタンスのwhereメソッドを使用しルートパラメータのフォーマットを制約できます。」 ということは、Route::get()こちらの関数でルートインスタンスが生成されているため、whereメソッドが使えるといった解釈で正しいでしょうか?
退会済みユーザー

退会済みユーザー

2019/06/08 11:06 編集

あなたは原理原則を理解することが目的になっているようですね。 > Route::get()こちらの関数でルートインスタンスが生成されているため、whereメソッドが使えるといった解釈で正しいでしょうか? 自分はこのようには理解することを目的にはしていないので、全く気にならない。目的のプロダクトを生み出すために必要であれば覚えるし、必要なければスルーする。 この場合なら,whereってパラメータの検証したい時に使えばいいんだなと理解すればそれで十分だと思います。 「インスタンス」どうのこうのというのは、Laravelの話ではなくてPHPのクラスの話だし。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問