
今日は Laravel を使ってアクセスカウンターをつくってみましょう!

PHP と何が違うんだわん?

Larael では PHP はもちろん使えますし独自の構文を使用して簡単にアプリをつくることができます!

Blade 構文ってやつかにゃ?

にゃんみちゃんよく知ってますね!今日は Laravel 独自のBlade 構文や MVC モデルなどの基本を解説しながらアクセスカウンターをつくってみましょう!
こんにちは!あっきーです。
今回は Laravel でのアクセスカウンターの作り方を紹介します。
この記事を読むことで以下のことを習得できます。
・処理は PHP なので PHP の基本構文
・Laravel を勉強したあとの簡単なアウトプットの指針
Laravel の基本
まず、これから Laravel を始める人のために基本的概念の話を簡単に説明します。
① データベース系の処理を記述する「Model」
② 表示処理を記述する「View」
③ プログラムの処理を記述する「Controller」
Laravel では上記のように役割ごとにコーディングを分割する MVC モデルに基づき設計されています。
今回つくるアクセスカウンターでは「Controller」と「View」の部分を使って処理を記述し「Model」であるアクセス数をカウントするデータ部分は今回はテキストファイルに書き込みを行うといった流れで行っていきます。
Laravel のインストール
まずは、Laravel をインストールします。
今回は Laravel を始めた人をメインの対象にしてますので環境構築の話は割愛します。
環境構築からやる人は以前に記事でまとめてますのであわせてご確認ください。

AWS での話ですが、ローカル環境でも環境変数少しいじるくらいの違いしかなく基本は同じですので参考にはなるかと思います。
掲示板のアクセスカウンターというシチュエーションでやっていきますので「BBS」という名前の Laravel プロジェクトを作成します。
初期設定
Laravel ではまずどのディレクトリにアクセスした時にどの処理を行うかを定義するルーティングを設定する必要があります。
どの処理を行うという部分が「Controller」で記述したプログラミングです。
ルーティングで設定したプログラミング処理を元に「View」テンプレートでレンダリングを行いブラウザに結果を返します。
今回は使用しませんがこの時に「Model」のデータベースにもアクセスし必要な情報を使用したりします。

プログラムで記述された情報を元に HTML 要素を生成することをレンダリングというのじゃ。
ルーティングの設定
BBS/routes/web.php
1 2 3 4 |
<?php //コメント部分などは省略してます。 Route::get('BBS', 'PagesController@index'); |
Laravel のインストール時にデフォルトである上記ファイルにルーティング処理を記述します。
https://ドメイン/BBS にアクセス時に「pagesController」ファイルのプログラミング処理を「index.blade.php」ファイルでレンダリングするという処理を定義しています。
Contoroller ファイルの作成
ルーティングで設定した「pagesController」ファイルをコマンドから作成します。
ターミナル
1 |
php artisan make:controller BBSController |
BBS/Http/Controllers/pagesController.php のディレクトリにファイルが生成されます。ここにプログラミング処理を記述していきます。
Viwe テンプレートファイルの作成
「pagesController」でのプログラミング処理を受け取りレンダリングする「View」ファイルを作成します。
以下のディレクトリ配下に「BBS」フォルダを作成し、そのフォルダ内に「index.blade.php」ファイルを作成します。
BBS/resouces/BBS/index.blade.php
.blade は Laravel 独自のテンプレートファイルです。
レイアウト内で表示を制御したり、レイアウトを継承して複数を組み合わせたりするための構文が用意されていたり、様々な機能が用意されたファイルです。
Laravel ならではの機能の1つなので、ぜひマスターしたいものです。
カウント処理を記述する
ではプログラミング処理を記述していきましょう。BBS/Http/Controllers/pagesController.php にプログラミング処理を記述していきます。
pagesController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class PagesController extends Controller { public function index($file_name = "counter.txt") { if (file_exists($file_name)) { $handle = fopen($file_name, "r"); $count = (int)fread($handle, 20) + 1; $handle = fopen($file_name, 'w'); fwrite($handle, $count); fclose($handle); } else { $handle = fopen($file_name , "w+"); $count = 1; fwrite($handle, $count); fclose($handle); } $data = ['msg'=>'あなたは ' .$count .' 人目の訪問者です。']; return view('BBS.index', $data); } } |
では、解説していきます。
アクセス数を書き込むファイル作成
if 分を使用し file_exists 関数で「counter.txt」の有無で処理を分岐します。
ファイルが存在する場合は書き込み処理を行い、ない場合は else 以下の処理を実行し、書き込みようのファイルを作成します。
1 |
$handle = fopen($file_name , "w+") |
① fopen の第2引数で記述した "w+" で読み込み、書き出しようにオープンする。
ファイル作成時の初期値の設定
ファイルを作成したら初期値のカウント処理を記述します。
1 2 3 4 |
$count = 1; fwrite($handle, $count); fclose($handle); |
① fwrite で第1引数の $handle(counter.txt) に第2引数の $count(1) を書き込む。
② fclose でファイルを閉じる。
ファイル読み込み時の処理を記述
file_exists 関数で「counter.txt」が存在した場合の処理を記述していきます。
1 2 3 4 5 |
$handle = fopen($file_name, "r"); $count = (int)fread($handle, 20) + 1; $handle = fopen($file_name, 'w'); fwrite($handle, $count); |
① fopen でファイルを読み込む。
② fread で読み込んだファイルにアクセス数の数字を増やす。
fopen の "r" でファイルを読み込み fread でバイナリセーフなファイルの読み込みを行っています。
簡単にいうと fopen でファイル自体を読み込み fread で機械後に変換したファイルを読み込むという風に考えてもらえればいいと思います。
※fread(第1引数, 第2引数)の記述方法
第1引数:ファイルポインタ
⇒読み込んだファイルのファイルポインタの指定
第2引数:length
⇒length で読み込むバイト数を指定。
③ fopen 'w' で書き込みモードにする。
④ fwrite で書き込みを行う。
プログラム処理を index.blade.php に渡す
プログラムの処理が終わりましたら「View」テンプレートである「index.blade.php」にデータを渡す処理を記述します。
1 2 |
$data = ['msg'=>'あなたは ' .$count .' 人目の訪問者です。']; return view('BBS.index', $data); |
blade ファイルへの値の受け渡しには view メソッドを使用します。view の呼び出しは以下のように記述します。
1 |
return view('テンプレート', 配列); |
テンプレートはフォルダとファイルは「.」でつなぎ、拡張子の記述はせずファイル名のみで大丈夫です。
「BBS」フォルダの「index.blade.php」に $data の連想配列を受け渡すという処理になっています。
View の処理を記述します
あとは渡された値を表示する記述をするだけです。
Laravel のテンプレートファイルでは {{}} の中に値や変数、関数を記述するだけで表示されます。
ターミナル
1 2 3 4 5 6 7 8 9 10 |
<html> <head> <meta charset="UTF-8"> <title>アクセスカウンター</title> </head> <body> <h1>アクセスカウンターだよ</h1> <p>{{$msg}}</p> </body> </html> |
表示確認
最後に表示確認しましょう。
サーバを起動します。
ターミナル
1 |
php artisan serve --port=8080 |
https://ドメイン/BBS にアクセス
無事表示されました。アクセス毎に数字が増えていきます。
お疲れ様でした。
さいごに
最後まで読んでいただきありがとうございます。
Laravel のアクセスカウンターの記事がなかったので書いてみましたが如何でしたでしょうか。
次回は Model も使用しもう少し本格的なプログラミングの記事を書いて行こうと思いますので引き続きよろしくお願いします。
プログラムの記述に間違いなどありましたらご指摘ください。