1. はじめに
Laravelでサンプルサイト以外のWebページを表示させてみました。
今回はMVCモデルを意識しつつ、ユーザからリクエストがあった際に、以下を実行し結果を返すページを作成しました。
- USERのブラウザエージェント情報及びアクセス元IPアドレスを表示する。
- データベースに存在するMariaDBアカウント情報(host,user)を表示する。
2. MVCモデルとは
MVCはModel,View,Controllerの略で各々役割が異なります。各役割は以下の図の様になっております。 役割を分けてコーディングする事で、目的毎に機能を分離でき、プログラムの保守性、再利用性が上がります。 Modelではデータと処理ロジックを、Viewでは見た目を、Controllerでは主にアクセス受付とModel、Viewへの橋渡しを行います。LaravelではMVCモデルを参考にしてサイト構築できる様になっています。
3. LaravelでWebページを構築する
3-1. LaravelでWebページを構築する際の流れ
設定ファイルの作成順序に特に縛りはありませんが、 データや処理の流れを意識するためにも、今回は処理の順序に合わせて作成しました。
3-2. プロジェクトの作成
先ずは新規Laravelプロジェクトを作成します。
$ cd [project-parent-directory] $ laravel new [project-name] $ sudo chown -R www:www [laravel-project-root]
3-3. ルーティングの設定
Webサイトは複数のページから構成されています。ルーティングはURLへのアクセスを基に、ユーザからのリクエストを適切なControllerに引き渡す役割を担います。先に掲載したMVCモデルの図では、UserからControllerへのアクセス(ユーザがブラウザからURLアクセス)が該当します。
ドメイン/IPアドレスのルートに対する全てのリクエストは最初に”public/index.php”に引き渡されます。
項目 | 値 |
---|---|
設定ファイル | [laravel-project-root]/routes/web.php |
設定構文 | Route::get(‘[アクセスさせたいパス]’, ‘[コントローラ名@アクション]’); |
説明 | https://domainname/myfirstpage にアクセスすると、 “myfirstController” Controllerの “index” メソッドを実行します。 |
3-4. Controllerの設定
コントローラは(ルーティングされた)ユーザの操作を受付、ユーザの操作を基にModelへデータの操作指示を行います。Modelの操作が完了したら、ViewへModelの操作結果の確認を指示します。コントローラはコマンドでプロジェクト毎に生成する必要があります。
$ cd [laravel-project-root] $ sudo php artisan make:controller myfirstController $ sudo chown apache:apache ./app/Http/Controllers/myfirstController.php $ ls -l ./app/Http/Controllers/myfirstController.php -rw-r--r--. 1 apache apache 124 May 17 15:31 ./app/Http/Controllers/myfirstController.php
ファイル内でindexアクションの実行を指定します。
ユーザーエージェント情報の取得はPHPの機能で実装します。
$ vi ./app/Http/Controllers/myfirstController.php
* 2行目に記載しているAppのLinux上での実際のPATHはappであるが、Appとする必要があります。
use App\models\mysqlModel;
3-5. Modelの設定
通常であればアプリケーション用にデータベース及びテーブルを作成し操作しますが、 今回はMySQL/MariaDBに最初から備わっているmysqlデータベースを利用して、 ユーザー一覧を抽出してみます。具体的には次の操作をコンソールから実施した際に得られる結果を、 Webページ上に出力します。
//コンソールからMariaDBコンソールへログイン $ mysql -u [username] -p //データベースを選択 MariaDB > use [database name]; //ユーザー名一覧を確認 MariaDB > select host,user from user;
MariaDBへの接続設定をenvファイルへ記載します。
$ cat [laravel-project-root]/.env | grep DB_* DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=mysql DB_USERNAME= [your mysql user] DB_PASSWORD= [your user password]
* root以外のユーザからmysql データベースを操作する際は、grant optionを付与してください。
MariaDB > grant all privileges on *.* to your_myql_user@localhost with grant option;
laravelではModelの作成場所は指定されていませんが、マニュアルページで推奨されているapp配下に作成します。
$ cd [laravel-project-root] $ sudo php artisan make:model models/myfirstModel $ sudo chown apache:apache ./app/models/myfirstModel.php $ sudo vi ./app/models/myfirstModel.php
3-6. Viewの設定
Viewは操作されたModelの結果を視覚化しユーザに返します。具体的には、HTML/CSS/JSやPHPによるWebページが該当します。このViewのファイルには”.blade.”が含まれますが、これはBlade表記を利用する上で必要となります。
$ cd [laravel-project-root] $ cd resources/views/ $ sudo touch myfirstpage.blade.php $ sudo chown apache:apache myfirstpage.blade.php $ sudo vi myfirstpage.blade.php
3-7. Webサイトへのアクセス
以下の様にURLへアクセスすると作成したページを閲覧可能です。
DocumentRootを[laravel-project-root]/public にしている場合。
https://[ServerDomain or IPaddress]/myfirstpage
DocumentRootを上記以外にしている場合。
https://[ServerDomain or IPaddress]/[laravel-project-path]/public/myfirstpage
4. エラーへの対応
4-1. サイトアクセス時に404エラーが表示される(Apacheの場合)
WebサーバにApacheを利用していてエラー404になる場合は、allow overrideの設定が問題かも知れません。この場合、httpd.confの該当箇所を以下の様にすれば閲覧可能となります。
変更前
AllowOverride None
変更後
AllowOverride All
4-2. PHP PDOエラー
WebページURLへアクセスすると、PHPのExceptionページが表示される。
“could not find driver (SQL: select `host,user` from `user` limit 1)”と表示される。
この場合、phpinfo(); 等でサーバの設定を確認すると、PDO driversにmysqlが存在しない可能性がある。
データベースとしてMariaDBやMySQLを利用している場合は、php-mysqlndをインストールする事で解決する事ができる。PostgreSQL等を利用している場合は対応するPDOをインストールすれば良い。
$ sudo yum install --enablerepo=remi,remi-php73 php-mysql $ sudo systemctl restart httpd
問題なく構成されると、PDO driversのenabled対象にmysqlが追加されます。