Sec3 データベース接続
“47”Update更新で履歴を残すか、完全に上書きかは他の講座でもあまり触れなかった部分ではないでしょうか。revisionを作って1→2にすることで「これは一度更新されたものですよ」を表しています。削除も同じように完全に消すか、ただ非表示にするかに分けられます。”48”データベースを作りますが、データ型は細かいので注意。
idはINTだけどageはもっと少ない数字だけで済むのでTINYINT
urlは文字数制限のないTEXT
genderは2択のBOOLEAN
your_nameとemailとcontact(お問い合わせ内容)は文字数制限ありのVARCHAR、
created_at(作成日時)は日付+時間のTIMESTANP
とデータ型はたくさんあるので調べながらになります。
“50”PDOはデータベースとの接続に特化したクラスで「PDO::~~」と書くのはプロパティやメソッドを静的な使い方ができ、PDOクラスにはあらかじめメソッドや定義済み定数が用意してあります。”51”からエディタでデータベースと接続 質問を見てもここで接続できない人が多いようで、注意点としてDB_HOSTは空白無しで詰めて書くこと、そしてhost=”127.0.0.1”でダメな場合もあるのでhost=”localhost”も試してみましょう。この辺りはおまけでも残しておきました。”52”でSQL文を変数に入れnewでインスタンス化したPDOに入れます。
$sql = ‘select * from contacts where id = 4’; //SQL文
$stmt = $pdo->query($sql); //SQL実行 ステートメント
$result = $stmt->fetchall();
var_dump($result);
これでidが4番のデータをブラウザ画面上で見れます。ただ実際にはユーザーが入力欄にデータを指定して使う場合がほとんどです。
$sql = ‘select * from contacts where id = :id’; //名前付きプレースホルダー
$stmt = $pdo->prepare($sql); プリペアードステートメント
$stmt->bindValue(‘id’, 5, PDO::PARAM_INT); //紐づけ
$stmt->execute(); //実行
var_dump($result);
これでidが5番のデータが見れますが、これだけでは先ほどと同じ…なので「5」のところはユーザー入力で変化させるので変数にします。
”53”銀行システム(残高・Aから引き落とし・Bに振り込み)などで使われるまとめて処理するトランザクションはBeginTransaction, commit, rollbackこの辺りはこの後のレッスンには関係ありません。”54-55”でブラウザ上のお問い合わせフォームからデータベースに保存しますが、この辺りもほぼコピペ作業になります。Laravelでは簡略化されますが、「仕組みはこうだよ」の例として学びます。
Sec4-5 クッキー・セッション・オブジェクト指向
“56”セッションはサーバーで、クッキーはブラウザで情報を管理・保存してログイン状態のままにしておいて、次回アクセス時もパスワードなど入力しなくてもいいようにします。session_start();でセッションを作成すると自動的にクッキーも作られるので、var_dump($_COOKIE);で情報を見ることもできます。このコードは「あったら、なかったら」のいい例なので残しておきます。書けなくても読めることが重要です。
<?php
if(!isset($_SESSION['visited'])) {
echo '初回訪問です';
$_SESSION['visited'] = 1;
$_SESSION['date'] = date('c');
} else {
$visited = $_SESSION['visited'];
$visited++;
$_SESSION['visited'] = $visited;
echo $_SESSION['visited'].'回目の訪問です<br>';
if(isset($_SESSION['date'])) {
echo '前回訪問は' . $_SESSION['date'] . 'です';
$_SESSION['date'] = date('c');
}
echo '<pre>';
var_dump($_SESSION);
echo '</pre>';
echo '<pre>';
var_dump($_COOKIE);
echo '</pre>';
}
?>
visitedがなかったら’初回訪問です’、visitedを作って、dateも日付で作成、
visitedがあったらvisitedをひとつずつ増やして、$_SESSION[‘visited’]に入れ直して「○○回目の訪問」に当てはめ、dateは「前回訪問は○○」なのでまずそのまま当てはめてから、$_SESSION[‘date’]を更新、
このような流れです。ゆっくり読めば理解できる内容ではないでしょうか?ただこれを自分で作れるかはあやしいですよね。
“58”「= ○○」で関数に初期値を設定することも可能です。
function defaultValue($string = 初期値) {
echo $string . ‘です’;
}
defaultValue();
defaultValue(テスト);
これで「初期値です」と「テストです」が出力され、何も引数に渡さないと“初期値”が$stringに入ります。
“61”からクラスを作りますが、文字にできないのでポイントだけ。thisをこの講座では「このクラスの~」と読んでいますが、まぁこれでいいかも。以前「このクラスの~」ではない方がいいかなとも思いましたが…$this->product = $productで「このクラスのproductは$productです」でいいですかね、$productは引数を受け取った値です。”63”抽象クラスとインターフェイスはこの後のレッスンで使うこともありませんし、この辺りから「解説してるっていうか、やってることをただ呟いてるだけだな…」と気付き、自然とコードを写し「おっ、動いた」のコピペ作業になります。本講座の悪い点「だから何なの?」がこの辺りでも感じるのでは。メソッドの強制、インターフェイスだと関数の中身は書かない、それが…どこで便利なのか、がイメージできない。”66”からターミナルを使ってコマンドでファイルを作ったり移動したり、初めは全く何をしているのかわかりませんが、真似して入力してみてください。
Sec6 Laravel入門
“70”で「LaravelをインストールするにはPHPの管理ツールcomposerを使う」それぞれの関係を把握しておきましょう。ここから本格的にターミナル・コマンドプロンプトを使いますが、はっきり言って最初はコピペ作業になりますが、「やった、動いた」を目指せばいいかと思います。WordPressの時も「さっきから…何をわけわかんないことを言ってんだ…」の連続でしたが、たぶんプログラミングってそういうものです。
cdで動いてlsで表示してpwdで現在地確認、さっそくわからないですが、その名の通り“コマンド”なので、考えるようなものではないです。cd /Application/MAMP/htdocsに移動してcomposer create-project laravel/laravel task_test –prefer-dist “6.” これでMAMPのhtdocsフォルダ内にtask_testというフォルダが作られそこにLaravel一式が用意されます。–prefer-distは圧縮版でversionは6と指定します。php artisan serveでLaravelのサーバー機能をONにします、この後のレッスンでも100回以上入力することになるかもしれないコマンドです。CTRL + Cでサーバー停止、ファイルを作成したりの他の作業はサーバーを止めて行うので停止もセットで頻出です。
“71”タイムゾーンや文字コードの変更でconfigのapp.phpを探しますが「こんなにファイル多いの…」と驚きました。この時点で「覚えるのは無理、動けばいいや」に考えをシフトしましょう。デバックバーのインストールで「コピペで済ませますが…」が初登場、この後も何度かありますが、皆さんは動画を止めて手書きで頑張ってください。”72”でデバックバー非表示のためにコマンドphp artisan cache:clearとphp artisan config:clearを実行しますが、これも質問で度々このコマンドをすることで「なぜか動きました」が多いようですので、サーバーの再起動とセットで上手く動作しないときは一応試してみてください。”74”php artisan migrateでlaravel_taskの中にテーブルが作成できて接続できたことを示しています。
“75”LaravelはMVCモデルで動いています。
Model->データベースとやりとり
View->見た目
Controller->モデルとビューの間で振り分ける処理
の前にまずRoutingファイルがあってそこからコントローラーに渡り、モデルかもしくはそのままビューに振り分けています。この辺りの「今書いてるこのファイルは何?」がイメージしにくいのもこのあとの学習の難関です。
“82”実際にファイル同士のつながりを見ていきます。routesフォルダのweb.phpで初期設定で
Route::get('/', function () {
return view('welcome');
});
「ルート/」でresources/views/welcome.blade.phpに飛ぶようになっています。これだと直接ビューファイルにアクセスしているので、コントローラーに
Route::get('tests/test', 'TestController@index');
「ルート/tests/test」でTestControllerへ、さらにビューファイルへ
class TestController extends Controller
{
public function index() {
return view('tests.test');
}
}
これで「ルート/tests/test」にアクセスするとコントローラーを通ってresources/views/tests/test.blade.phpの中身を表示できるようになります。さらに”86”のクエリビルダを使えばSQL文感覚でデータを取得できます。
use Illuminate/Support/Facades/DB;
function index()の中で
$tests = DB::table('tests')
->select('id')
->get();
“89”blade で先ほどtests/testでは書きませんでしたが、○○.blade.phpをつけるだけで様々な関数が使える状態になります。例えば
@foreach($values as $value)
{{$value->id}}<br>
{{$value->text}}<br>
@endforeach
見慣れない{{}}でhtmlspecialchars関数がかかっていることになります。”90”でNode.jsの説明(npm)もあり「インストールしておいてください」と言われますが、インストールしなくてもなぜか本講座は最後まで完走できてしまう…どこかのタイミングでインストール出来ていたのか?言われた通りにコマンドプロンプトを動かしていたのでそれがどこだったのか…“93”でエラーメッセージを日本語に Githubで日本語版を作っているかたがいてその方のページからダウンロードしてresources/langの中にはenしかないのでjaというフォルダをコピーします。config/app.phpに’locale’ =>’en’ を ‘ja’,にすれば先ほどのjaに切り替わりエラーメッセージは日本語になります。こういう拡張もできるんですね。
まとめ
Sec7 簡易アプリをLaravelで作りますが、長いので今回は書きません。ファイルの行き来が多く文字にできないこともありますし、僕自身1周目がただのコピペ作業だったので、とりあえず動くことを優先すればいいと感じました。作り物はともすたさんの「PHP+MYSQLサーバーサイド入門」のひとことSNSアプリの方がLaravelを使ってませんが見た目も機能も豪華なものです。本講座の簡易アプリはアイコン画像・返信などの機能もないので1周目では最後まで「で、Laravelの何がすごいの?ファイル多くてわかりにくいだけなんだけど…」が拭えませんでした。この復習兼ねての2周目で「ファイルが分かれてるからどこに何を書けばいいかわかる、チームで開発する際には便利だし、機能の追加など拡張性がある」と思えました。
またLaravelの特徴としてはWordPressを勉強した方にとっては
WordPressほど型にはめられてない
作れる範囲が広く自在
プラグイン的な関数も用意されている
といった表現で伝わるでしょうか、登録してSNSの様に多くの人と繋がるために使われるのはLaravelで、ブログ・企業ページのように宣伝・紹介を目的にするならWordPressなのかもしれません。例えばページネーションはControllerに->paginate(件数);Viewに{{$contacts->links()}}を書くだけで実装でき、(全件数÷表示件数)をceilで小数点切り上げなどの”仕組み”まで知らなくても大丈夫なので、便利ですが「知らないまま進めてしまう」のはWordPressのプラグイン的な功罪両面ではないでしょうか。
いずれにしても「まずLaravelというものを動かしてみたい」といった方にはPHPの基礎から解説していますし、おすすめできる講座だと思います。Laravel編に入るとついていくのに必死で写すだけのコピペ作業になってしまう部分もありますが、質問にも多く回答されているので、自分と同じ症状を見つけやすくとりあえず完成まではいけるはずだと思います。
おまけ
#PHP #udemy #駆け出しエンジニアと繋がりたい #プログラミング
— Halu@エンジニア(未) (@halu_0366) June 12, 2021
Sec3-51 PDOでデータベースに接続できなかったが、他の方の質問読んでDB_HOSTのhostをlocalhostに、php.iniファイルでport番号確認mysqli.default_port = 3306だったのでMAMP-Preferences-PortsのMySQLを8889から3306に変更で解決
#PHP #udemy #駆け出しエンジニアと繋がりたい
— Halu@エンジニア(未) (@halu_0366) June 14, 2021
Sec9-129 にはwindowsのxamppしか解説がなかったのでMAMPの人に。1:52~Setting Checkで「どこにインストール?」が空欄で動画と違う、右のBrowseから「PC/C:/MAMP/bin/php/(使ってるPHPのver)/php.exe」を選択しNext、あとは動画の通りでcmdから確認
php artisan migrateでエラーが「could not find driver」だったけどphp.iniの場所が違った「conf/php7.4.1」の方ではなく「MAMP/bin/php/php7.4.1」の方のphp.iniの;extension=pdo_mysqlをコメントアウト解除で解決!!「Migration table created successfully」出ました。何でphp.iniが2つもあるの…
— Halu@エンジニア(未) (@halu_0366) June 14, 2021
コメント