MVCフレームワークを作って理解が深まった!!
追加
Dive Into Codeでカリキュラムで使用するテキストの無料公開されてるみたいですね
RailsしたかったりHTMLやCSSなどを改めて勉強したりスクール興味ない人でも見ておいて良いかもしれませんね!→URL
愛読ってほどではないですが常にブラウザで開いてるページがあります
・phpTheRightWay
・php.net
・TechscoreSQL
どれもおすすめというか初心者向けでは全くないですが必要な知識だと思います!
今回は一番上のPHP The RightwayでMVCフレームワークの簡単なファイルがあって
それを実際に作ってみてこれがわかりやすすぎ!と思ったのでRailsとかフレームワークをいきなり始める人向けに魔法を解いてあげようと思います!!
MVCフレームワークとは
データベース部分やビュー部分を分割して便利にしようというもの
MVCはモデル、ビュー、コントローラーの頭文字を繋げただけ
サンプルを見た方が早いので見てみましょう!!(PHPやってなくてもわかるはず)
PHP The RightWay のチャプター8
一つのファイルにデータベース接続とSELECTによってデータを抽出
それをforeachでデータがあるだけ表示させるプログラム
これは本当にただデータベースに接続してそれを表示だけで済んでいるが簡単な一言掲示板だとかなりの量のファイルになってしまう更に機能を追加するとなると行数がとんでもなくなってしまって大変だ
ということで分割
本当はデータベース接続も別ファイルにした方が良いがサンプルそのまま使う
ディレクトリ構成はこんな感じ
myappディレクトリに
・foo.php (コントローラー部分に当たる)
・models/FooModel.php (モデルに当たるファイルの名前はモデルはこうやって書くみたいに気にしないで)
・views/foo-list.php (ビューに当たる)
・foo.phpの中身はこんな感じ
includeでmodels/FooModel.php と views/foo-list.php を読み込んでいる
分割したものを読み込んでいるだけなのだ!!
・models/FooModels.phpはサンプルだとちょっと変わっている(クラスにして SELECTをメソッドにして使いやすくしている)
実際はさっきのこれと同じと考えて良い
単にデータベースのデータを取ってくるだけ
・views/foo-list.php は残りのHTMLとしてデータの表示で当然こうなる
単に分割してるだけなのだ
dbconnectなどデータベース接続用のファイルを作る感覚で分割して一つのファイル(今回はコントローラーfoo.php)で読み込む
HTML部分が見やすくなってる+データベースが変わる、入力など操作が変わればデータベースのところを変更しよう
これで立派なMVCフレームワークになった
正直フレームワークは柔軟性がないとかPHPに強いエンジニアが言ってるのを聞いてて
いやキツイでしょって思ってたけど私は全然問題ない感じがしてきた
・プラスアルファ
ちなみに htmlspecialchars と書いてエスケープ処理することが必須だったりする
alertなどのいたずら、悪用を防ぐ為に必須なわけだけど
複数の項目 例えば タイトル、本文、コメントなどを多くのページで書くのは指が疲れてしまうしダサい。なので関数にして楽をしよう!!
単純にこんな感じで使える
同様にデータベースの処理も簡単にする為にクラスにしたのが先ほどのMVCのサンプルにもなっている
(getAllFoosの関数で簡単にSELECT文を使えるようにしている)
そんなこんなで色々省略していけばフレームワークの思想、使い方がわかり
流行の移り変わりにも対応できるようなものが使えるはず
ちなみにRubyから始めてPHPをやっているわけですが挫折さえしないならWebならPHPの方が理解ができると思うのでPHPを勧めます
Dive Into Codeでカリキュラムで使用するテキストの無料公開されてるみたいですね
RailsしたかったりHTMLやCSSなどを改めて勉強したりスクール興味ない人でも見ておいて良いかもしれませんね!→URL
愛読ってほどではないですが常にブラウザで開いてるページがあります
・phpTheRightWay
・php.net
・TechscoreSQL
どれもおすすめというか初心者向けでは全くないですが必要な知識だと思います!
今回は一番上のPHP The RightwayでMVCフレームワークの簡単なファイルがあって
それを実際に作ってみてこれがわかりやすすぎ!と思ったのでRailsとかフレームワークをいきなり始める人向けに魔法を解いてあげようと思います!!
MVCフレームワークとは
データベース部分やビュー部分を分割して便利にしようというもの
MVCはモデル、ビュー、コントローラーの頭文字を繋げただけ
サンプルを見た方が早いので見てみましょう!!(PHPやってなくてもわかるはず)
PHP The RightWay のチャプター8
一つのファイルにデータベース接続とSELECTによってデータを抽出
それをforeachでデータがあるだけ表示させるプログラム
<?php
$pdo = new PDO('sqlite:/path/db/users.db');
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
?>
//ここまででデータベースに接続してデータを抽出、以下はHTMLにPHPを埋め込みデータを表示
<html>
<ul>
<?php
foreach ($db->query('SELECT * FROM table') as $row) {
echo "<li>".$row['field1']." - ".$row['field1']."</li>";
}
?>
</ul>
</html>
これは本当にただデータベースに接続してそれを表示だけで済んでいるが簡単な一言掲示板だとかなりの量のファイルになってしまう更に機能を追加するとなると行数がとんでもなくなってしまって大変だ
ということで分割
本当はデータベース接続も別ファイルにした方が良いがサンプルそのまま使う
ディレクトリ構成はこんな感じ
myappディレクトリに
・foo.php (コントローラー部分に当たる)
・models/FooModel.php (モデルに当たるファイルの名前はモデルはこうやって書くみたいに気にしないで)
・views/foo-list.php (ビューに当たる)
・foo.phpの中身はこんな感じ
<?php
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8mb4', 'username', 'password');
// モデルを読み込む
include 'models/FooModel.php';
// インスタンスを作る
$fooModel = new FooModel($db);
// Fooのリストを作る
$fooList = $fooModel->getAllFoos();
// ビューを表示する
include 'views/foo-list.php';
includeでmodels/FooModel.php と views/foo-list.php を読み込んでいる
分割したものを読み込んでいるだけなのだ!!
・models/FooModels.phpはサンプルだとちょっと変わっている(クラスにして SELECTをメソッドにして使いやすくしている)
<?php
class FooModel
{
protected $db;
public function __construct(PDO $db)
{
$this->db = $db;
}
public function getAllFoos() {
return $this->db->query('SELECT * FROM table');
}
}
実際はさっきのこれと同じと考えて良い
<?php
$pdo = new PDO('sqlite:/path/db/users.db');
$stmt = $pdo->prepare('SELECT name FROM users WHERE id = :id');
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$stmt->bindParam(':id', $id, PDO::PARAM_INT);
$stmt->execute();
?>
・views/foo-list.php は残りのHTMLとしてデータの表示で当然こうなる
<html>
<ul>
<?php foreach ($fooList as $row): ?>
<li><?php echo$row['field1'] ?> - <?php echo$row['field1'] ?></li>
<?php endforeach ?>
</ul>
</html>
単に分割してるだけなのだ
dbconnectなどデータベース接続用のファイルを作る感覚で分割して一つのファイル(今回はコントローラーfoo.php)で読み込む
HTML部分が見やすくなってる+データベースが変わる、入力など操作が変わればデータベースのところを変更しよう
これで立派なMVCフレームワークになった
正直フレームワークは柔軟性がないとかPHPに強いエンジニアが言ってるのを聞いてて
いやキツイでしょって思ってたけど私は全然問題ない感じがしてきた
・プラスアルファ
ちなみに htmlspecialchars と書いてエスケープ処理することが必須だったりする
alertなどのいたずら、悪用を防ぐ為に必須なわけだけど
複数の項目 例えば タイトル、本文、コメントなどを多くのページで書くのは指が疲れてしまうしダサい。なので関数にして楽をしよう!!
function h($value) {
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
<?php print h("変数など") ?>
hの1文字で省略して書けるようになる同様にデータベースの処理も簡単にする為にクラスにしたのが先ほどのMVCのサンプルにもなっている
(getAllFoosの関数で簡単にSELECT文を使えるようにしている)
そんなこんなで色々省略していけばフレームワークの思想、使い方がわかり
流行の移り変わりにも対応できるようなものが使えるはず
ちなみにRubyから始めてPHPをやっているわけですが挫折さえしないならWebならPHPの方が理解ができると思うのでPHPを勧めます
コメント
コメントを投稿