DockerでPHP+DB+Laravelを構成してみる | 自分、ぼっちですが何か? (taki-lab.site)
前回までできていればDockerコンテナを立ち上げられるはず。
VSCodeを立ち上げて左下のボタンから「Reopen in Container」をクリック。
VSCodeのプロンプトを開くとDocker内のプロンプトになっていると思うので、これからLaravelのセットアップを行います。
> composer create-project laravel/laravel sample --prefer-dist
DBの設定を行います。
.envの編集
DB_CONNECTION=mysql
DB_HOST=laravel1_db
DB_PORT=3306
DB_DATABASE=my
DB_USERNAME=my
DB_PASSWORD=my
config/logging.phpの編集
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single', 'stderr'],
'ignore_exceptions' => false,
],
モデルの作成
> php artisan make:model Book
コントローラーの作成
> php artisan make:controller BookController
app/Http/Controllers/BookController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use App\Models\Book;
class BookController extends Controller
{
//
public function index()
{
$data = [
'books' => Book::all()
];
Log::debug('デバッグ用。$dataの内容です。');
Log::debug($data);
return view('book.index', $data);
}
}
ビューの作成
resources/views/book/index.blade.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charaset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<table border="1">
@foreach($books as $book)
<tr>
<td>{{ $book->id }}</td>
<td>{{ $book->title }}</td>
<td>{{ $book->insert_timestamp }}</td>
</tr>
@endforeach
</table>
</body>
</html>
ルーティングの設定
routes/web.php
Route::get('/books', 'App\Http\Controllers\BookController@index');
xdebugのエラー対策
app/Http/Middleware/EncryptCookies.php
<?php
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array<int, string>
*/
protected $except = [
'XDEBUG_SESSION'
];
}
動作確認
> php artisan serve
ブラウザでhttp://172.0.0.1:8001/bookへアクセスする。