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

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

新規登録して質問してみよう
ただいま回答率
85.50%
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

解決済

5回答

3160閲覧

Laravelの仕組み、言語構造について

akoro

総合スコア27

Laravel

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

PHP

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

Laravel 5

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

0グッド

1クリップ

投稿2019/01/22 08:30

編集2019/01/22 09:46

プログラミング独学初めて2か月目、Laravel二日目の初心者です。
情報過多でよく分からなくなってきたので確認も兼ねて質問させてください。

いくつかあげたので、一部の回答のみでもかまいません。
よろしくお願い致します。

教本にある基本的なLaravelの使い方の練習は終わりました。
(web.phpでルーティングを加筆、controller作成、controllerファイルの編集、web画面にHelloの表示)

①コントローラとは?
functionなど具体的な処理をうながすなにか、処理をコントロールするもの、でしょうか?
これの存在意義がよく分からないです、普通のfunctionとの違いはなんでしょう?

コントローラの言語の構造がよくわからない

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; global $head, $style, $body, $end; $head='<html><head>'; $style=<<<EOF <style> body{ font-size:16pt; color:#999; } h1{ font-size:100pt; text-align:right; color:#eee; margin:-40px 0px -50px 0px; } </style> EOF; $body='</head><body>'; $end='</body></head>'; function tag($tag,$txt){ return "<$tag>".$txt."</$tag>"; } class HelloController extends Controller { public function index(){ global $head, $style, $body, $end; $html=$head.tag('title','Hello/Index').$style.$body .tag('h1','index').tag('p','this is Index page') .'<a href="/hello/other">go to Other page</a>' .$end; return $html; } public function other(){ global $head, $style, $body, $end; $html=$head.tag('titl.e','Hello/Other').$style.$body .tag('h1','Other').tag('p','this is Other page') .$end; return $html; } }

②?>が存在しないのはなぜですか?
EOFがend of fileだということまでは分かったのですが、これがあれば?>と同じような意味になるのでしょうか?

③タグがほとんどないのはなぜでしょう?
EOF;以降、PHPファイルだと目にする<html><head><body>などのタグがありませんがそれでも成り立つのはどういう原理でしょうか?
クラスの中に表示したいものを格納しているので成り立っているのでしょうか?

④クラスがよくわかりません。
function(){}の{}のようにある程度まとまった処理のくくり、という認識で合ってますでしょうか?

⑤新しいプロジェクトの作成
検索するとインストール直後のlaravel new ~は出てくるのですが、これはプロジェクトが変わるたびに行うものなのでしょうか?
ルーティングのweb.phpのように一つしか存在しないファイルはどうするのでしょう?

理解力が乏しいうえに初心者なのでリテラシー低くて失礼致します。
ご教授いただけますと幸いです。

ーー追記ーー
回答を受けたうえで新たな疑問。
⑥EOF;について
EOFで一度ファイルを区切っていますが、それ以降も<?phpと認識されているということで合っていますでしょうか?
また、なぜこのタイミングで区切ったのでしょうか?自分で今後プログラムを作成するうえで、何を基準に区切ればいいのでしょうか?

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

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

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

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

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

guest

回答5

0

ベストアンサー

①コントローラとは?

ソフトウェア開発における設計モデルの1つであるMVC(Model View Controller)のControllerに該当するものです。
これはPHPだけの話でもなく、Laravelだけの話でもありません。
Laravelの仕組みがMVCであるというだけの事です。

Model View Controller

MVCの歴史は古く、全く新しいものではありません。
MVCで検索すれば色々出てきますので調べてみてください。
MVCのフレームワークを使うのであれば、必ず抑えておくべきものです。

②?>が存在しないのはなぜですか?

PHPでは ?>は省略しておくのが習慣となっています。

PHPの最後の終了タグ ?> は付けないでおこうねというお話

③タグがほとんどないのはなぜでしょう?

HTMLを出力するのはMVCにおいてV(View)の役割だからです。
僕はLaravelは知らないのですが、Viewに該当するクラスが必ずあるはずです。
もちろん、PHPなことには変わりないので、
ControllerクラスでechoすればHTMLとして出力されそうな気はしますが、
それではMVCが破綻してますので、やはり1度MVCについて勉強してみてください。

④クラスがよくわかりません。

オブジェクト指向の根本的なものです。
functionはデータを渡してデータを戻すという関数でしかありません。
データとデータに対する操作をひとまとめにしときましょう。という考え方から生まれたのがクラスです。
データを関数に渡して、そのデータに手を加えたものをリターンするという考え方は
オブジェクト指向に最も反しているものになります。
全く分からないと思いますので、こちらはオブジェクト指向を勉強してみてください。

初心者向けに徹底解説!オブジェクト指向とは?

⑤新しいプロジェクトの作成

すみません。これは良く分かりません。

追記

⑥EOF;について

これはヒアドキュメントと言われるものです。
ヒアドキュメント

ソースコード上での改行が、そのまま改行として認識されたりする書き方のことです。
ダブルクォートやシングルクォートなどの文字列の中で改行することはできないため、
通常の文字列で改行を表そうと思うと\n\r\nなどの改行コードを書く必要があります。
他にも通常の文字列ではエスケープが必要な文字も、そのまま書く事ができたりと大変便利なものです。

EOFというのは、EOFである必要はなく何でもいいのです。

PHP

1$style1=<<<EOF 2ああああああああああああ 3EOF; 4 5$style2=<<<AAA 6ああああああああああああ 7AAA;

上記どちらでもいいのです。
ここからヒアドキュメントが始まりますというラベルなだけです。
開始と終了を同じラベルにすることによって、そのヒアドキュメントのブロックを示すことができます。

EOM(End Of Message)とかが良くみたりしますが、あまり僕は好きではないですね。
開始にもEOMと書いてるわけですからね。
今回のだとPAGE_STYLEなどのように、何を表している文字列なのかを書いた方がいいと僕は思いますが、
PHPの文化をあまり知らないので何とも言えません。。。
僕ならEOFEOMのような表記はしません。
そもそもファイルの終わりじゃないですしEOF(End Of File)はおかしいでしょ。

投稿2019/01/22 09:10

編集2019/01/22 10:12
root_jp

総合スコア4666

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

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

akoro

2019/01/22 09:32

丁寧にありがとうございます。 MVCとオブジェクト指向についてもう少し勉強してみます。 主にPHPについて学んできましたが、ファイル全体がPHPのみというものに初めて出会った(必ずHTMLのタグから始まるものだった)ので知識不足でした、参考URLも勉強になります。
root_jp

2019/01/22 10:21

EOFについて追記しました。 昔ながらのPHPとHTMLを両方書く方法でも、別に構わないのですが、 複数人で開発していると、ある人はこういう書き方をして、ある人はこういう書き方をしてなどのように、プログラムの作りに統一性を持たせるのが難しいんです。 統一させようと思うと、チーム内で書き方にルールを持たせる必要があります。 そのルールがMVCになります。 ただし、MVCにのっとって作りましょうだけでは難しいので、 MVCを強制されるフレームワークを使うことによって、作りがある程度統一され、 品質もある程度保証されるというわけです。
akoro

2019/01/23 01:39

追記もありがとうございます。 本来PHPのechoで\nで開業をいちいち表していましたが、EOFの間にはさまれている箇所は、開業がそのまま開業として認識されるのですね。 そしてEOFという名前(endがついているのに二回出てくるという点)に惑わされていたところもありましたので、解説見て納得致しました。なんでもいいのですね。 また、フレームワークによって作りが統一されるというのも新しい認識でした。 丁寧な説明ありがたいです、感謝いたします。
guest

0

Laravel使うのはまだ早いので忘れたほうがいい

投稿2019/01/22 08:58

kawax

総合スコア10377

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

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

akoro

2019/01/22 09:42

早いことは重々実感致しました、ご意見ありがとうざいます。
退会済みユーザー

退会済みユーザー

2019/01/22 23:05

Laravel は初心者向きじゃないよねぇ。。。
akoro

2019/01/23 01:21

初心者向けではないんですね。 フレームワークは楽だ、と知人からアドバイスいただいたのですが、仕組みを理解するのがここまでやっかいとは思いませんでした。 すぐに使いこなすのは無理だと思いますが、頑張ります、ありがとうございます。
m.ts10806

2019/01/23 02:08

Laravelは「ウェブ職人のためのフレームワーク」がうたい文句です。 「楽だ」というのはきちんと規則なり規約なりを理解した上でそれに則って作っていけば楽にできるということであって、「初心者でも誰でも簡単に習得できる」という意味ではありません。 学習コストは決して低くないと思います。アップデートも頻繁ですし。 よく「プログラミング言語するならPHPが楽だよ」というのを耳にしますが、きちんとやろうとするとどの言語も等しく難しいものだと思います。 (XAMPPや入門記事・書籍の多さからあくまで導入部分だけ「楽」と言えるかもしれません) まずは大元の言語であるPHPをきちんと習得すべきなのは言うまでもありません(なのでこの回答は言葉はちょっと足りないなと思いますが最も的を射ていると思います)
akoro

2019/01/23 02:28

おっしゃる通り、基本の規則が分かっていて初めて楽だと感じるものなのですね。 ごもっともなご指摘です。 ありがとうございます。
m.ts10806

2019/01/23 02:30

私が言う「規則」は「PHPの基本」という意味ではなく「フレームワークのルール」という意味です。
guest

0

フラットなPHPからフレームワークへ のスライドが参考になると思います。まずこれを一読してください。例として登場するフレームワークが少々古かったりしますが、概念を理解するための資料としては申し分ありません。

オブジェクト指向に疎ければ Progate でどうぞ。講座を3周ぐらいすれば、全くゼロの状態からでもオブジェクト指向脱初心者レベルぐらいにはなれると思います。

細かい質問はだいたい回答ついてるのでパスで

投稿2019/01/22 19:21

編集2019/01/22 19:28
mpyw

総合スコア5223

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

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

akoro

2019/01/23 02:02

スライドとても参考になります、ありがとうございます。 progate同時並行で進めているので、はやく3周までまわれるように取り組みます。
guest

0

②③あたりの回答をします。

確かにPHPはこんな風に、HTMLの中にコードを埋め込むような書き方ができます。

php

1<body> 2 <p><?php print("Hello World!") ?></p> 3</body>

しかし、これはHTML埋め込み構文と呼ばれるもので、PHPの構文(文法)の一種に過ぎません。
こんな風に、HTMLを出力する書き方もできます。

php

1<?php 2 // HTMLを出力 3 print("<body>"); 4 print(" <p>Hello World!</p>"); 5 print("</body>"); 6?>

この最後の ?> は省略できます。

以下のように、文字列を変数に代入し、結合するなんてこともできます。

php

1<?php 2 // HTML文字列を変数に代入 3 $body_begin = "<body>"; 4 $body_main = " <p>Hello World!</p>"; 5 $body_end = "</body>"; 6 7 // 文字列を結合 8 $body = $body_begin.$body_main.$body_end; 9 10 // HTMLを出力 11 print($body);

この文字列を結合する処理を関数にすることもできます。

php

1<?php 2 // HTML文字列を変数に代入 3 $body_begin = "<body>"; 4 $body_main = " <p>Hello World!</p>"; 5 $body_end = "</body>"; 6 7 // 文字列を結合 8 function concat($a, $b, $c){ 9 return $a.$b.$c; 10 } 11 $body = concat($body_begin, $body_main, $body_end); 12 13 // HTMLを出力 14 print($body);

グローバル変数にすれば、functionの引数が必要なくなります。

php

1<?php 2 // グローバル変数として宣言 3 global $body_begin, $body_main, $body_end; 4 5 // HTML文字列を変数に代入 6 $body_begin = "<body>"; 7 $body_main = " <p>Hello World!</p>"; 8 $body_end = "</body>"; 9 10 // 文字列を結合 11 function concat(){ 12 return $body_begin.$body_main.$body_end; 13 } 14 $body = concat(); 15 16 // HTMLを出力 17 print($body);

だんだんと、ご質問のコードの書き方に近づいてきてる気がします。

このように、PHPは様々な書き方ができますので、色々な書き方を試してみるのがよいと思います。

その上で、MVC等の学習をすると、Laravelのコードが理解できるようになると思います。

投稿2019/01/22 10:25

segur

総合スコア73

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

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

akoro

2019/01/23 01:44

具体的な例までそえていただいてありがとうございます。 今まで逆の<html>内に<?php ?>を組み込むものしかやってこなかったので、新しい知識でした。 Laravelの例の文章に近づいていますね、ありがとうございます。
guest

0

  1. どのコントローラのことでしょうか?(classのあと?App\Http\Controllers?)
  2. PHPしか書いていないファイルでは?>は普通書きません。
  3. PHPでタグが書いてあるのが普通というのは偏見ですし、フレームワークを使っているので、生のHTMLを操作するような書きかたはしません。
  4. クラスは、オブジェクト指向を学びましょう
  5. プロジェクトがかわるたびに行います

クラスくらいは勉強したほうがいいかもしれないですが、色んなサンプルを写経して見えてくることもあると思います。

投稿2019/01/22 09:12

papinianus

総合スコア12705

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

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

akoro

2019/01/22 09:37

ありがとうございます。 php artisan make: controllerで作成するコントローラです、ほかの方の回答でイメージはつかめました。 >PHPでタグが書いてあるのが普通というのは偏見ですし、フレームワークを使っているので、 >生のHTMLを操作するような書きかたはしません。 上記プログラミング言語のファイル名がcontroller.phpで、以前練習で作成した.phpファイルがすべて<html><head>などのタグがあるものでした。 <body>の中に<?php ?>を打ち込むスタイルだったため、これが通常状態と思い込んでおりました。 フレームワークはそういう仕組みではないのですね、勉強になりました。
papinianus

2019/01/22 09:47

歴史的にはphpをhtmlのテンプレートとして利用していた時期もあったらしいですが、そういう認識を持つのは有害ですね。 時間にとってもゆとりがあるならhtmlを出力することを自分でクラス化すると学びがあるかもしれない。 だいたいの場合は他のことやったほうがいいです。習うより慣れろで、いくつかチュートリアルやるとか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問