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

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

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

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

Q&A

解決済

5回答

4478閲覧

laravelのコントローラとはMVCのCその物と聞いたのですがいまいちピンときません。

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel 5

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

0グッド

5クリップ

投稿2018/01/16 11:32

laravelのコントローラとはMVCのCその物と聞いたのですがいまいちピンときません。
調べたところ下記のようにあったのですが、ブラウザからのアクションとは具体的にどんな事でしょうか?

コントローラーはブラウザからのアクションに応じて実行されるファイルです。

ルーティングというのも同じようなことが書いてあるのですがいまいちわかりません?
>>>
「このアドレスにアクセスしたら、どのプログラムを実行し、どのファイルを表示するか」も、すべてフレームワークから管理できるようになっているのです。それを行うのがルーティングです。

どう違うのでしょうか?

すべてのフレームワークはmvcがしっかりわかってないと何が書いてあるかもわからないものなのでしょうか?

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

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

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

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

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

m.ts10806

2018/01/16 11:46

調べた先の記事・参照先の記事・質問のきっかけとなった記事などを質問に追記してください。
guest

回答5

0

ベストアンサー

例え話をしようと思います。

ブラウザくんは**「リクエスト」**くんにhttp://example.com/sampleという地図を持たせてお使いを頼みました。これを**「アクション」**と呼びます。

リクエストくんはhttp://example.com/sampleという場所へ行きます。このhttp://example.com/sampleは**「URL」**や**「アドレス」**と呼ばれます。

さてリクエストくんは地図を辿り、http://example.comというお店へたどり着きました。ここで待ち構えているのが[Apache](https://ja.wikipedia.org/wiki/Apache_HTTP_Server)さんや[Tomcat](https://ja.wikipedia.org/wiki/Apache_Tomcat)さんに代表される**「HTTPサーバ」**です。今回のお店では[Apache](https://ja.wikipedia.org/wiki/Apache_HTTP_Server)さんが窓口をやっています。

Apacheさんはリクエストくんがやってきたので、彼のお使いに応えられる人のところへ案内します。ここで登場するのがLaravelさんなどの**「フレームワーク」**です。

Laravelさんのところへやってきたリクエストくんは/sampleが欲しい、と伝えます。Laravelさんは「/sampleが欲しいのかい。じゃあSampleControllerさんにお願いしよう」と業務の割り振りをします。これが**「ルーティング」**です。

SampleControllerさんは**「コントローラ」と呼ばれる仕事をしています。リクエストくんがお使いに来たので、「レスポンス」を持って帰らせなければなりません。SampleControllerさんはまず「モデル」を駆使して「データベース」から必要なものを取り出しました。さらにそれを「ビュー」**担当のbladeさんに渡します。

bladeさんはSampleControllerさんから受け取ったものを、指示された**「テンプレート」**を元に、指定されたところに詰め込んでいきます。こうして出来上がった「レスポンス」は、SampleControllerさんからリクエストくんに渡されます。

リクエストくんは無事ブラウザくんのところに帰ってきて、ブラウザくんはレスポンスを受け取ることができました。


一般的なWebフレームワークは大抵MVCのスタイルを取っています。なぜかというと「そのスタイルにそっていればほとんどのことがうまくいく」からです。MVCのことを知っていれば、フレームワークの理解が進むことは間違いないです。コードの全部を読んでいけば、MVCの概念を知らなくても理解はできますが、例えばLaravelで「見た目だけ直したい」と思ったときにindex.phpからコードを追っていくのは馬鹿らしいこと極まりないです。MVCを知っていれば「ビュー」を直せばよい、とすぐ分かるのでviewsフォルダの中だけを探せばよい、ということに繋がります。

投稿2018/01/17 00:58

編集2018/01/17 01:02
masaya_ohashi

総合スコア9206

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

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

退会済みユーザー

退会済みユーザー

2018/01/17 10:00

>>> ブラウザくんは「リクエスト」くんにhttp://example.com/sampleという地図を持たせてお使いを頼みました。これを「アクション」と呼びます。 >>> HTTPリクエストくんがブラウザによってWEBサーバに送られるという事ですね。 下記のように情報を見つけたのですが、htmlファイル見せてや問い合わせフォームの入力情報をPOSTなどで送ることでしょうか? HTTPリクエストはWebブラウザなどのクライアントからの要求になります。HTTPレスポンスはその要求に対するWebサーバーの応答のことです。 アクションとかぶっているように思うのですがどう違うのでしょうか? >>> さてリクエストくんは地図を辿り、http://example.comというお店へたどり着きました。ここで待ち構えているのがApacheさんやTomcatさんに代表される「HTTPサーバ」です。今回のお店ではApacheさんが窓口をやっています。 >>> HTTPリクエストがapachに渡されるのですね。 >>> Laravelさんのところへやってきたリクエストくんは/sampleが欲しい、と伝えます。Laravelさんは「/sampleが欲しいのかい。じゃあSampleControllerさんにお願いしよう」と業務の割り振りをします。これが「ルーティング」です。 >>> ルーティングとは業務の割り振りの事なのでしょうか? 「モデル」を駆使して「データベース」から必要なものを取り出しました。さらにそれを「ビュー」担当のbladeさんに渡します。 という作業の事をコントローラというのでしょうか? 最後にMVCを知っていなくても、投稿サイトなどは作れるが、知っているといじる際に役に立つので、ある程度知っておいてから、フレームワークの学習を始めた方が良いという事でしょうか? 教えてもらった情報を理解できればこれで当面は十分ですか?
masaya_ohashi

2018/01/17 10:11 編集

> htmlファイル見せてや問い合わせフォームの入力情報をPOSTなどで送ることでしょうか? > アクションとかぶっているように思うのですがどう違うのでしょうか? アクションとリクエストがかぶっているのはその通りです。要求そのものがリクエスト、要求を出す行為がアクションだと思ってください。アクションにはGETやPOSTの種類があり、リンクを踏んだときだけでなく、フォームからも送られることがあります。 > HTTPリクエストがapachに渡されるのですね。 一般的にはそのサーバマシンで「ポート80、または443で待ち受けているプロセス」がHTTPリクエストを受け取ります。それがApacheであるか、Tomcatであるか、Node.jsであるか、または他のものか、はサーバ側次第です。 > ルーティングとは業務の割り振りの事なのでしょうか? 例え話で言えばそのとおりです。リクエストのURLを解釈して、「何のコントローラがこのリクエストを処理するか」を振り分ける行為がルーティングです。 > という作業の事をコントローラというのでしょうか? 作業そのものは一般的に「ロジック」と呼ばれます。コントローラは一般的にはそれを行う「クラス」を指しています。「作業」と「作業者」の違いですね。 > 教えてもらった情報を理解できればこれで当面は十分ですか? 私はあなたがこの例え話からどのくらいの知識を得られたかはわからないので、十分と言い切ることは出来ないです。Laravelの入門サイトを一から見るのであれば、もうスタートしてよいでしょう。単語が出てきたとき、この例え話を思い出しながら考えれば、多少頭に入りやすいかと思います。
退会済みユーザー

退会済みユーザー

2018/01/17 11:08

ありがとうございます。 ポート80、または443で待ち受けているサーバののプロセスというプログラムが、apachやIISなどで、これがHTTPリクエストを受け取るのですね。 >>> > ルーティングとは業務の割り振りの事なのでしょうか? 例え話で言えばそのとおりです。リクエストのURLを解釈して、「何のコントローラがこのリクエストを処理するか」を振り分ける行為がルーティングです。 https://example.com/postだったら「postコントローラーを引数無しで実行」とaro10さんが仰っているのですが、こちらの解釈で良いのでしょうか? 何のコントローラとはどの作業がリクエストを処理するかという事ですか?よくわかりません。 >>> コントローラは一般的にはそれを行う「クラス」を指しています。「作業」と「作業者」の違いですね。 という事ですが子のクラスとはインスタンスの設計図の事でしょうか?
masaya_ohashi

2018/01/18 00:31

> https://example.com/postだったら「postコントローラーを引数無しで実行」とaro10さんが仰っているのですが、こちらの解釈で良いのでしょうか? 概ねその通りですが、ルーティング次第では別に/postというURLだからといって必ずしもPostControllerが担当するわけではありません。別に/postの担当をHogeControllerに作業を割り当ててもよいのです。ただ、一般的なMVCフレームワークはURLの形とコントローラの配置は同じようにします。 > 何のコントローラとはどの作業がリクエストを処理するかという事ですか?よくわかりません。 何の、という言い方が悪かったかもしれません。「どのコントローラが」のほうが伝わるでしょうか。フレームワークの中にはたくさんのコントローラを作ります。その中で「どのコントローラ」が「どのURL」のリクエストに対して対応するか、を決めるのがルーティングです。 > という事ですが子のクラスとはインスタンスの設計図の事でしょうか? そうです。Laravelで言うと[php artisan make:controller]で生成するものです。app/Http/Controllersの中にあるものは全部コントローラです。 ちなみにモデルはapp直下にあり、ビューはresources/viewsの中にあります。
退会済みユーザー

退会済みユーザー

2018/01/19 00:58

お返事ありがとうございます。 >>> どのコントローラ」が「どのURL」のリクエストに対して対応するか、を決めるのがルーティングです。 コントローラというプログラムファイルが始めにlaravelに存在して、そこに project\resources\viewsにあるhellow blade.phpなどのファイル自体がビューなのですね project\app\Http\ControllersにあるHeloController.phpなどのファイル自体がコントローラなのですね モデルもどこかにあるファイルそのものなのですか?
masaya_ohashi

2018/01/19 01:48

> モデルもどこかにあるファイルそのものなのですか? app直下にあります。[php artisan make:model]で作るものがそうです。もしログイン認証作成のために[php artisan make:auth]を実行していれば、User.phpというモデルが勝手に作成されているはずです。
退会済みユーザー

退会済みユーザー

2018/01/19 05:15

app直下にUser.phpとフォルダがあります。 フォルダはモデルではなくUser.phpのみがモデルの実態のファイルという事ですか?
masaya_ohashi

2018/01/19 05:37 編集

そうです。ファイルだけがモデルです。[php artisan make:model]で生成されるモデルはapp直下に置かれます。しかし、一応特定のフォルダ内に作ることも可能です。例えば[php artisan make:model Models/Hoge]とコマンドを打てばModelsフォルダ内に作られます。 Laravelにおいて、どのファイルがモデルなのかを明確に区別するなら、そのclassが[Illuminate\Database\Eloquent\Model]を継承しているかどうかを見ればよいです。
退会済みユーザー

退会済みユーザー

2018/01/19 06:17

ありがとうございました。MVC三つがphpファイルそのものだったんですね。 中のコードが違うため役割が違うもののファイルだったという事がわかりました。
退会済みユーザー

退会済みユーザー

2018/01/19 09:18

>>> ブラウザからのアクション 「URLにアクセスする(ページを開く)」「データを送信する(フォームを送信)」などです。 (実際はアクションがあるのはブラウザだけとは限りません。他ソフトから実行される場合もありますが、「URLにアクセス+データ送信」の原則は変わりません) >>> こちらの回答を見るとアクションとは、WEBページ見せてというブラウザからWEBサーバへのリクエストもアクションと考えてよいのでしょうか?
masaya_ohashi

2018/01/19 09:36

> こちらの回答を見るとアクションとは、WEBページ見せてというブラウザからWEBサーバへのリクエストもアクションと考えてよいのでしょうか? そういうことになります。ブラウザのアドレスバーに直接URLを入れてアクセスする、aタグ等をクリックする、はどちらもGETアクションということになります。
退会済みユーザー

退会済みユーザー

2018/01/19 09:43

<a href="https://teratail.com/questions/109258"></a>をクリックして、このhtmlみせてというHTTPリクエストもブラウザのアクションの一種なのですね。ありがとうございました。
guest

0

そもそもどのようにクライアントからリクエストされたデータがlaravel側でどのような手続きを経てレスポンスされているか段取りが理解できていますか。

ルーティングとはいわば宛先を指定することです。hogeさんにパラメータaを渡してというリクエストを処理するのがルータの役割です。

ルーティングによって、処理するコントローラが決まり、その後コントローラ上のどの関数が走るのかが決まります。なのでルータとコントローラは全然違う役割を担うことになります。

投稿2018/01/17 12:09

imamoto_browser

総合スコア1161

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

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

退会済みユーザー

退会済みユーザー

2018/01/19 04:55

>>> そもそもどのようにクライアントからリクエストされたデータがlaravel側でどのような手続きを経てレスポンスされているか段取りが理解できていますか。 そのような初心者用の情報が見つからないので、理解できていません。 ルーティングとは、どのコントローラにHTTTPリクエストを渡すかというアドレスを指定する行為そのものに名前を付けたものという事ですか? https://teratail.com/questions/109258と同じイメージですか?
guest

0

私も勉強中ではありますが回答させて頂きます。

ブラウザからのアクション

「URLにアクセスする(ページを開く)」「データを送信する(フォームを送信)」などです。
(実際はアクションがあるのはブラウザだけとは限りません。他ソフトから実行される場合もありますが、「URLにアクセス+データ送信」の原則は変わりません)

ルーティング

「アクセスされたアドレスにより、どのコントローラーやビューを実行するか決める機能(設定)」と言い換えると分かりやすいかと思います。

例えば
https://example.com/postだったら「postコントローラーを引数無しで実行」
https://example.com/show/0だったら「showコントローラーに0を渡して実行」
https://example.com/homeだったら「homeビューを表示」
のように、「道(行き先)を決める」からルーティング(route + ing)です。

MVCを理解する必要がある?

私も完全にMVCを理解した訳では無いですが、Laravelにおいては
「モデル」は「データベースに紐付いたデータクラス(コンポーネント的なもの)」
「コントローラー」は「モデルやビューを操作するもの」
「ビュー」は「見た目を制御するもの(≒描画用のテンプレート)」
という認識でいます。

実際に手を動かしてみて「各要素はこんな風に繋がって動くのだな」ということが分かるとMVCの解説ページも理解しやすくなるのではないかなと思います。
(その解説ページも賛否両論あったりで「結局MVCって何だ」となったりしますが)

投稿2018/01/16 13:20

sakura_hana

総合スコア11427

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

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

退会済みユーザー

退会済みユーザー

2018/01/17 07:33

>>> ブラウザからのアクション 「URLにアクセスする(ページを開く)」「データを送信する(フォームを送信)」などです。 (実際はアクションがあるのはブラウザだけとは限りません。他ソフトから実行される場合もありますが、「URLにアクセス+データ送信」の原則は変わりません) >>> テラテイルならテラテイルのサイトにアクセスすること自体もブラウザからのアクションなのですか? 問い合わせフォームのデータ送信もそうなのですね。 >>> ルーティング 「アクセスされたアドレスにより、どのコントローラーやビューを実行するか決める機能(設定)」と言い換えると分かりやすいかと思います。 例えば https://example.com/postだったら「postコントローラーを引数無しで実行」 https://example.com/show/0だったら「showコントローラーに0を渡して実行」 https://example.com/homeだったら「homeビューを表示」 のように、「道(行き先)を決める」からルーティング(route + ing)です。 >>> https://example.com/postだったら「postコントローラーを引数無しで実行」するという機能の事をルーティングというのですね。 機能の名前という事ですね。 >>> MVCを理解する必要がある? 本当に触りだけ理解すればとりあえず作り出して良いのですかね?
sakura_hana

2018/01/17 07:48

> テラテイルのサイトにアクセスすること自体もブラウザからのアクションなのですか? その通りです。 > 機能の名前という事ですね。 機能の名前であることは確かなのですが、 『「https://example.com/postだったら「postコントローラーを引数無しで実行」」という挙動をするように開発者(amebatvさん)が指定出来る』ということです。 何も指定しなかったらhttps://example.com/postにアクセスしても「そんなページ無いよ」とか「ルート設定間違えてるよ」という表示がされます。 > 本当に触りだけ理解すればとりあえず作り出して良いのですかね? 私自身が作りながら覚える派なので、問題無いと思います。(効率の良し悪しは今は論じません) ローカル環境だけで動かしてれば誰にも迷惑掛けないですし、万一ぶっ壊れても最悪全部やり直してもいいですし。 例えば上記のルーティングの話も、一度書けば理屈については「あーなるほど」となると思います。 (その後「で、具体的にどうすりゃいいんだ?」と再度検索することになる訳ですが)
退会済みユーザー

退会済みユーザー

2018/01/18 09:01

MVCがわかっていないと、何を書いてあるかも理解できずに投稿サイトも作れないと思ったのですが、全くそんなことはないのですね。
sakura_hana

2018/01/18 09:14

例えば私はMAMP環境で以下サイトを見つつ始めました。(Laravel 5.4ですが) http://www.webopixel.net/php/1259.html 「どのフォルダに何が入るか」「artisanの基礎の基礎」などはこれで把握しました。 あとは必要(用途)に応じてドキュメント見たり検索してます。 MVCに限らず「プログラムの勉強方法」はteratail内でも時々質問に上がっているので、調べてみると面白いかもしれません。
退会済みユーザー

退会済みユーザー

2018/01/19 01:01

参考サイトありがとうございます。 ここならフレームワーク初心者にもわかりやすく解説してそうですね
guest

0

手前味噌ですが、以前に書いたこちらの記事を見て頂くと役割って大事かもと思って頂けるかなと思います。
https://qiita.com/s-age/items/fe4b321c5445341dfd6e

投稿2018/01/25 14:10

hiiro0196

総合スコア8

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

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

退会済みユーザー

退会済みユーザー

2018/01/26 03:56

ありがとうございます。 >>> Request 顧客、何を食べたいか、どれだけ食べたいかで支払いが増える Webサービスでも同じで、情報を多く欲しい時はそれだけ時間と手間がかかる リクエストはWEBアプリにこんな作業をしてと伝えることなので、こんな料理を作ってという顧客と同じという事ですね。 例えばこの数値を足してというリクエストを受けてWEBアプリが計算をして結果を返すことがリクエストという事ですね。 WAFは、sqlインジェクション対策の事でしょうか? ビジネスロジックとは何の事ですか? >>> Controller ホール係、注文を聞いて厨房に届けるという役割を担う 調理(ビジネスロジック)を行わずに、厨房には料理(モデル)に専念してもらう係 コントローラーはモデルにHTTPリクエストを渡す役割なのですか? >>> Model 厨房係、ビジネスロジック 食材を調理して、出来上がった料理を提供する係 受け取ったHTTPリクエストを処理するプログラムファイルという事ですか?
guest

0

LaravelではMVCの枠組を強制するものではなく、route.phpの各ルート定義にコードをずらずらと何百行と書いても問題ありません。

Route::get('/home',function(Request $request){ //各種処理 //〜 return view("test"); });

それだとそのうちに人間がプログラム構造の把握やテストする事が辛くなってくるので、その状況に直面した時にMVC等のそれぞれの関心事を分離した人間がプログラムを取扱易いアイデアを取り入れていくと学習上の理解や必要性の認識はし易いかと思います。
Laravel4時代の本ですが、Laravalフレームワーク開発者のTaylorさんが書いていて、Laravel日本語訳サイトを運営している方が訳している以下の本なども概念上の理解の助けにはなるかと思います。
Laravel: From Apprentice To Artisan 日本語版

投稿2018/01/16 15:23

aro10

総合スコア4106

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

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

退会済みユーザー

退会済みユーザー

2018/01/17 07:00

MVCの基礎をしっかり学んでからでないとlaravelを学んでも理解できないと思ったのですがそうでもないのですか? とりあえず投稿機能などを実装して、その後時間が出来たらやれば十分なのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問