インストールしたもの
- Docker(Docker-compose:複数のコンテナを同時に取り扱う)
docker-compose up -d workspace php-fpm nginx postgres
// -d:コンテナを起動した後に、ターミナルの操作に戻るためのオプション
- Laradock(WebサーバーやデータベースをDocker上に簡単に構築するため)
- Laradockディレクトリに移動してdocker-composeでLaravelをインストール
docker-compose exec workspace composer create-project --prefer-dist laravel/laravel . "6.20.0"
ルーティング
laravel/routes/web.php でルーティング追加
Route::get('/', 'ArticleController@index');
第一引数にはURLを文字列で、
第二引数には、どのコントローラーで何のメソッドを実行するのかを文字列で渡す。
ArticleController.phpのindexアクションメソッドを実行するという意味。
※ルーティングによって動くことになるコントローラーの各メソッドのことをアクションメソッド・アクションとよぶ。
コントローラー
laravel/app/Http/Controllers にArticleControllerを作るコマンド
docker-compose exec workspace php artisan make:controller ArticleController
Viewメソッド
return view('articles.index', ['articles' => $articles]);
第一引数はビューファイル名。
resources/views/articles ディレクトリのindexというビューファイルが表示される
第二引数はビューファイルに渡す変数の名称と、その変数の値を連想配列形式で指定。
'articles'というキーを定義することで、ビューファイル側で$articlesという変数が使用できるようになる。
異なる書き方
return view('articles.index')->with(['articles' => $articles]);
return view('articles.index', compact('articles'));
↑どれも同じ意味。
ビュー
resources/viewsディレクトリにbladeを作成する。
blade特有の記法
@yield('title')
↑@section('title', '記事一覧')や @section('title')~@endsection で書いた内容が反映される。
@extends('app') //app.blade.phpをベースとして使うことを宣言
@foreach($articles as $article)〜@endforeach //phpのforeach
{{ $article->title }} // {{ }}で囲うことで、Bladeに渡された変数の値を表示
{!! nl2br(e( $article->body )) !!} // {!! !!} エスケープしないデータの表示
nl2br: 改行文字の前に HTML の改行タグを挿入する
e(): PHPのhtmlspecialchars関数をdouble_encodeオプションにデフォルトでtrueを指定して実行
https://readouble.com/laravel/6.x/ja/helpers.html#collection-method
phpの型キャスト
https://www.php.net/manual/ja/language.types.type-juggling.php#language.types.typecasting
変換しようとする型を括弧で括り、キャストする変数の前に置く。
↓配列の手前に(object)と記述することで、配列がオブジェクト型に変換される。
'user' => (object) [
'id' => 1,
'name' => 'ユーザー名1',
],
Docker
コンテナに入る:『対象のコンテナで、対象のコマンドを実行する』というもの
docker-compose exec コンテナ名 コマンド名
↓workspaceというコンテナでbashを起動する
docker-compose exec workspace bash