Laravelインストール後の初期設定と入門/簡単にMVCでHelloWorld&データ受け渡しを行う
- 公開:
- 更新:
- カテゴリ: PHP Laravel
- タグ: PHP,Laravel,install,5.5,Beginner,MVC,5.6,5.7
Laravelに限りませんが、新しいPHPフレームワークに入門した時って、まずはインストール。そして初期設定、そして、MVCの一連の流れをなぞる為にHelloWorldの出力。という流れは、入門あるあるかなと思います。
今回は、インストール後の初期設定と、基本的なMVCを使ってHelloWorldを表示させる、そして、軽くデータの受け渡しまでを行います。
- アジェンダ
検証環境について
今回の検証環境に関しては以下になります。
- Linux CentOS 7
- Apache 2.4
- PHP 7.2/7.1
Laravelのバージョンについては、5.7/5.6/5.5/5.4/5.3にて動作確認済みです。
Linux環境でなくても(XAMPPなど)進めていけます。
途中、artisanコマンドを叩きますが、環境的に難しい場合は手動でのファイル作成でも進めていけます。
初期設定
まずは、必須ではありませんが、インストール直後にやっておくと良い初期設定を以下に紹介します。
日時設定
デフォルトではUTCに設定されているので、日本時間よりもマイナス9時間で出力されます。これを、日本時間にしておきます。
- laravel/config/app.php
- 68行目あたり「timezone」を変更します。
-
'timezone' => 'UTC',
↓
'timezone' => 'Asia/Tokyo',
ログの設定
デフォルトでは1つのファイルに溜める設定になっているので、日別でファイルを分割するようにして、ログファイルは30日分とします。
ログに関する設定ファイルはバージョンによって異なります。
Laravel5.7/5.6
ver 5.6から、ログに関する設定ファイルが専用ファイルに切り出されました。ver 5.7では設定項目が1つ増えています。
- laravel/config/logging.php
-
<?php
use Monolog\Handler\StreamHandler;
return [
'default' => env('LOG_CHANNEL', 'stack'),
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 7,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => 'critical',
],
/* ▼ 5.7から追加 ▼ */
'stderr' => [
'driver' => 'monolog',
'handler' => StreamHandler::class,
'with' => [
'stream' => 'php://stderr',
],
],
/* ▲ 5.7から追加 ▲ */
'syslog' => [
'driver' => 'syslog',
'level' => 'debug',
],
'errorlog' => [
'driver' => 'errorlog',
'level' => 'debug',
],
],
];
基本となる各チャネルの設定を行い、適宜、使用するログドライバをまとめてstackで指定するという流れになっています。
- default(デフォルトログチャネル)
- このオプションは、メッセージをログに書き込むときに使用されるデフォルトのログチャネルを定義します。 このオプションで指定された名前は、 "channels"設定配列で定義されたチャンネルの1つと一致する必要があります。
- channels(ログチャネル)
- ここでは、アプリケーションのログチャネルを設定することができます。 デフォルトでMonolog PHPロギングライブラリを使用します。 これにより、さまざまな強力なログハンドラ/フォーマッタを利用できます。
-
- stack
- 使用ログチャネルを指定します。
- channels
- 配列の形で指定したチャネルでロギングが走ります。
- single
- ログを1つのファイルに出力します。
-
- path
- 出力するログファイルの場所です。デフォルトではstorage()ヘルパーで設定されているので、出力先はlaravel/storage/logs/laravel.logになります。
- level
- ログを出力するレベルを設定します。
- daily
- ログを日別で出力します。
-
- path
- 出力するログファイルの場所です。デフォルトではstorage()ヘルパーで設定されているので、出力先はlaravel/storage/logs/laravel.logになります。
- level
- ログを出力するレベルを設定します。
- days
- ログファイルを何日間保持するか設定します。
- stderr
- ログを標準エラーに出力します。
-
- driver
- ログを出力するドライバを指定します。
- handler
- ログを出力する際のハンドラを指定します。
- with >> stream
- ストリームを指定します
- slack
- ログをslackに出力します。
-
- url
- SlackのWebhook URLを指定します。
- username
- ユーザ名を指定します。
- emoji
- 絵文字を指定します。
- level
- ログを出力するレベルを設定します。
- syslog
- ログをsyslogに出力します。
-
- level
- ログを出力するレベルを設定します。
- errorlog
- ログをerrorlogに出力します。
-
- level
- ログを出力するレベルを設定します。
今回は、日別でログを出力するようにしますので、以下のように設定します。(変更した箇所のみ表示します。)
<?php
return [
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily'], // ← ココ
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 30, // ← ココ
],
],
];
Laravel5.5~5.3
ver 5.5以下のバージョンはapp.phpにログ設定を記述します。
- laravel/config/app.php
- 124行目あたり「log」を変更し、「log_max_files」を追加します。
-
'log' => env('APP_LOG', 'single'),
↓
'log' => env('APP_LOG', 'daily'),
'log_max_files' => 30,
エラーメッセージを日本語化する
デフォルトでは英語のエラーメッセージが出力されるので、日本語設定にします。
- laravel/config/app.php
- 81行目あたり「locale」を「ja」へ変更
-
'locale' => 'en',
↓
'locale' => 'ja',
メッセージの日本語ファイルはデフォルトでは提供されていないので、Laravel 日本語言語ファイルからダウンロードしたファイルを、laravel/resources/lang/jaディレクトリを作成し、設置します。
- 最新版はver 5.7用です。
- 5.6と5.5の言語ファイルセットはブランチを切り替える事で入手可能です。
最終的には以下のようなディレクトリ構成になります。
laravel
├── resources
│ ├── lang
│ │ ├── en
│ │ │ ├── auth.php
│ │ │ ├── pagination.php
│ │ │ ├── passwords.php
│ │ │ └── validation.php
│ │ └── ja
│ │ ├── auth.php
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
データベースの接続設定
既に接続するべきデータベースが用意できている場合は設定しておきましょう。
- laravel/.env
- 8行目あたりからの設定項目に記述する
-
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
HelloWorldの表示
Laravelのインストールが終わり、初期設定も終わったら、次は一通りのMVC(Model View Controller モデル・ビュー・コントローラ)の流れの中でページを表示させるまでを簡単に行っていきます。
今回は、
「http://YOURDOMAIN/beginner にアクセスしたら、Hello World!! と表示される」
までの一連の流れを作ってみます。
ルーティング
まずはルーティングからです。ルーティングとは
「ここにアクセスしたら、このコントローラの、このアクションを実行します」
というのを指定する部分になります。
設定は laravel/routes/web.php で行えます。開いてみます。
<?php
Route::get('/', function () {
return view('welcome');
});
なにやら1つだけ記述がありますね。これは、Laravelをインストールした直後にブラウザアクセスで表示されたwelcome画面のルーティングです。
「サイトルートにアクセスしてきたら、welcomeビューを返します」 という記述になっていますが、コントローラもモデルも挟んでいないので、本当に簡単な記述になっています。
それではこの下に、ルーティングを追加します。記述は以下のようになります。
<?php
Route::get('/', function () {
return view('welcome');
});
Route::get('beginner', 'BeginnerController@index');
たった一行だけの追加です。
「http://YOURDOMAIN/beginner にアクセスしたら、Beginnerコントローラのindexアクションを実行する」
という意味になります。
ルーティングはこれで完了です。
コントローラ
次に、コントローラを作っていきます。ファイル名は、ルーティングの時に決めた、「BeginnerController」になります。
artisanコマンド
Laravelには「artisanコマンド」と言って、作成するファイルの書式をいちいち覚えていなくても、コマンド一発でファイルを生成してくれる便利なコマンドがあるので、それを使ってコントローラファイルを生成します。
Laravelルートディレクトリへ移動し、以下のartisanコマンドを叩きます。
# laravelのルートディレクトリへ移動
cd /path/to/laravel
# artisanコマンドでコントローラを生成
php artisan make:controller BeginnerController
# 実行結果
[demo@localhost laravel]# php artisan make:controller BeginnerController
Controller created successfully.
「Controller created successfully.」と表示されたら生成成功です。
コントローラファイルはlaravel/app/Http/Controllersに生成されます。そしてここが、コントローラの場所になります。
laravel
├── app
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Auth
│ │ │ ├── BeginnerController.php
│ │ │ └── Controller.php
生成された BeginnerController.php を開いてみます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class BeginnerController extends Controller
{
//
}
クラス宣言されているだけの、最小限の内容になっています。(もし何らかの理由でartisanコマンドが叩けない場合でも、上記内容でコントローラファイルを手動で作成すればOKです。)
それではここに、ルーティングで指示したindexアクションを記述します。以下のようになります。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class BeginnerController extends Controller
{
public function index()
{
return view('beginner');
}
}
indexアクションでは、「beginner」ビューを返しています。今回はこの記述だけでOKです。
ビュー
次に、ビューを作成します。
Bladeテンプレート
Laravelでは、「Bladeテンプレート」と言って、色々便利な事が出来るHTMLというかPHPファイルというか、、いわゆるそいつをビューファイルとして作成していきます。
ビューの設置場所は laravel/resources/view です。ここに、「beginner.blade.php」という名前でPHPファイルを作成します。
laravel
├─ resources
│ └─ views
│ ├─ beginner.blade.php
│ └─ welcome.blade.php
作成したら、以下のように簡単なHTMLを記述します。
- beginner.blade.php
-
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>First Page</title>
</head>
<body>
<p>Hello World!!</p>
</body>
</html>
何の変哲もないHTML5のみの記述ですが、「HelloWorld」さえ入っていれば問題ありません。サクッとハローワールドが目的ですからね。
動作確認
それでは、ブラウザから実際にアクセスしてみましょう。
ルーティングにも記述した通り、http://YOURDOMAIN/beginner にアクセスしてみます。
HelloWorldが表示されました。おめでとうございます!Laravelの一連の流れの基本はあなたによって掌握されました!
データの受け渡し
一連の流れの基本は抑えられたので、次にやってみたくなる事といえば、データの受け渡しです。
コントローラからビューへ、データをパスする流れを書いてみます。
BeginnerController.php を開いて、以下のように記述します。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class BeginnerController extends Controller
{
public function index()
{
// 配列の初期化
$data = array();
// データ格納
$data['name'] = 'rito';
$data['message'] = 'こんにちは';
// 現在日時
$today = date('Y年m月d日 H:i:s');
return view('beginner', ['data' => $data, 'today' => $today]);
}
}
配列と変数を用意して、それぞれにデータを格納しています。
そして、ビューの指定と共に、それらをセットしています。
わざわざ現在日時を別の変数に入れたのは、変数や配列などは、いくつでもこうしてビューの指定時にセット出来ますよという意図です。
次に、ビューです。
beginner.blade.php を開いて、以下のように記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>First Page</title>
</head>
<body>
<p>{{$data['name']}}さん</p>
<p>{{$data['message']}}</p>
<p>現在は {{$today}} です</p>
</body>
</html>
変数の部分が見慣れない書き方だと思いますが、これはBlade記法と言って、Laravelで提供されているBladeテンプレート独自の書式です。
{{変数}}
とする事で、そのまま変数を展開できます。わざわざ
<?php echo $data['name']; ?>
こう書かなくても良いので、慣れると楽です。(もちろん、上記のように書いても表示されます。)
それではブラウザからアクセスして確認してみましょう。
ばっちりデータの受け渡しがされていますね。
まとめ
以上で今回の作業は完了です。
今回はモデルが出てこなかったと思いますが、データの受け渡しデモの時に、直接値を記述していましたが、モデルからデータベースの値を受け取り、それをビューに表示する。といった流れになりますので、これで一連の流れは掴めたと思います。
それでもLaravelにはまだまだ便利で強力な機能がたくさんありますので、ぜひ色々と試してみてください。
尚、今回のサンプルソースはGithubから取得できます。