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

解決済

回答 5

投稿

  • 評価
  • クリップ 5
  • VIEW 2,232
退会済みユーザー

退会済みユーザー

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

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

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

どう違うのでしょうか?

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/01/16 20:46

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

    キャンセル

回答 5

checkベストアンサー

+5

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

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

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

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

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

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

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

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

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


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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/19 18:18

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

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

    キャンセル

  • 2018/01/19 18:36

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

    キャンセル

  • 2018/01/19 18:43

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

    キャンセル

+1

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

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

「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/18 18:01

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

    キャンセル

  • 2018/01/18 18:14

    例えば私はMAMP環境で以下サイトを見つつ始めました。(Laravel 5.4ですが)
    http://www.webopixel.net/php/1259.html
    「どのフォルダに何が入るか」「artisanの基礎の基礎」などはこれで把握しました。
    あとは必要(用途)に応じてドキュメント見たり検索してます。

    MVCに限らず「プログラムの勉強方法」はteratail内でも時々質問に上がっているので、調べてみると面白いかもしれません。

    キャンセル

  • 2018/01/19 10:01

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

    キャンセル

+1

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/19 13:55

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

    そのような初心者用の情報が見つからないので、理解できていません。


    ルーティングとは、どのコントローラにHTTTPリクエストを渡すかというアドレスを指定する行為そのものに名前を付けたものという事ですか?

    https://teratail.com/questions/109258と同じイメージですか?

    キャンセル

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/17 16:00

    MVCの基礎をしっかり学んでからでないとlaravelを学んでも理解できないと思ったのですがそうでもないのですか?

    とりあえず投稿機能などを実装して、その後時間が出来たらやれば十分なのでしょうか?

    キャンセル

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/26 12:56

    ありがとうございます。


    >>>
    Request
    顧客、何を食べたいか、どれだけ食べたいかで支払いが増える
    Webサービスでも同じで、情報を多く欲しい時はそれだけ時間と手間がかかる

    リクエストはWEBアプリにこんな作業をしてと伝えることなので、こんな料理を作ってという顧客と同じという事ですね。
    例えばこの数値を足してというリクエストを受けてWEBアプリが計算をして結果を返すことがリクエストという事ですね。


    WAFは、sqlインジェクション対策の事でしょうか?


    ビジネスロジックとは何の事ですか?


    >>>
    Controller
    ホール係、注文を聞いて厨房に届けるという役割を担う
    調理(ビジネスロジック)を行わずに、厨房には料理(モデル)に専念してもらう係

    コントローラーはモデルにHTTPリクエストを渡す役割なのですか?


    >>>
    Model
    厨房係、ビジネスロジック
    食材を調理して、出来上がった料理を提供する係

    受け取ったHTTPリクエストを処理するプログラムファイルという事ですか?

    キャンセル

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

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる