laravelのコントローラとはMVCのCその物と聞いたのですがいまいちピンときません。
調べたところ下記のようにあったのですが、ブラウザからのアクションとは具体的にどんな事でしょうか?
コントローラーはブラウザからのアクションに応じて実行されるファイルです。
ルーティングというのも同じようなことが書いてあるのですがいまいちわかりません?
>>>
「このアドレスにアクセスしたら、どのプログラムを実行し、どのファイルを表示するか」も、すべてフレームワークから管理できるようになっているのです。それを行うのがルーティングです。
どう違うのでしょうか?
すべてのフレームワークはmvcがしっかりわかってないと何が書いてあるかもわからないものなのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ベストアンサー
例え話をしようと思います。
ブラウザくんは**「リクエスト」**くんにhttp://example.com/sampleという地図を持たせてお使いを頼みました。これを**「アクション」**と呼びます。
リクエストくんはhttp://example.com/sampleという場所へ行きます。このhttp://example.com/sampleは**「URL」**や**「アドレス」**と呼ばれます。
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総合スコア9206
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/17 10:00
2018/01/17 10:11 編集
退会済みユーザー
2018/01/17 11:08
2018/01/18 00:31
退会済みユーザー
2018/01/19 00:58
2018/01/19 01:48
退会済みユーザー
2018/01/19 05:15
2018/01/19 05:37 編集
退会済みユーザー
2018/01/19 06:17
退会済みユーザー
2018/01/19 09:18
2018/01/19 09:36
退会済みユーザー
2018/01/19 09:43
0
そもそもどのようにクライアントからリクエストされたデータがlaravel側でどのような手続きを経てレスポンスされているか段取りが理解できていますか。
ルーティングとはいわば宛先を指定することです。hogeさんにパラメータaを渡してというリクエストを処理するのがルータの役割です。
ルーティングによって、処理するコントローラが決まり、その後コントローラ上のどの関数が走るのかが決まります。なのでルータとコントローラは全然違う役割を担うことになります。
投稿2018/01/17 12:09
総合スコア1161
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/19 04:55
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
総合スコア11427
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/17 07:33
2018/01/17 07:48
退会済みユーザー
2018/01/18 09:01
2018/01/18 09:14
退会済みユーザー
2018/01/19 01:01
0
手前味噌ですが、以前に書いたこちらの記事を見て頂くと役割って大事かもと思って頂けるかなと思います。
https://qiita.com/s-age/items/fe4b321c5445341dfd6e
投稿2018/01/25 14:10
総合スコア8
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/26 03:56
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
総合スコア4106
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/17 07:00
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。