Table of Contents
Togglecomposerをインストールする
1.下記リンクを元に、comopserをinstallする。
https://getcomposer.org/download/
googleで「composer download」で検索してください。
↓下記はサイトに書いてある情報のコピーです。まずは上記のリンクを確認ください。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
・composer.pharファイルのパスを通す。
下記コマンドを実行することによって、composer installのように実行できるようになります。
$ sudo mv composer.phar /usr/local/bin/composer
※ $は入力しなくていいです。$は、ターミナルに表示されている$を一般的に表現します。
Laravel SailでLaravelをインストールする
1.laravelをインストールする。
$ curl -s "https://laravel.build/example-app" | bash
※example-appがアプリの名前です。
Laravel Sailでdocker upをします
1.sail upでdockerを立ち上げる
cd skills
./vendor/bin/sail up
2.sailのエイリアス設定
そのプロジェクトでsailコマンドが楽になる。
$ alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
alias sail="vendor/bin/sail"
source .zshrc
最初のプログラムを作ってみよう【ルーティング】
1.laravelのディレクトリに移動する
$ cd /Users/imanaka/works/skills # <-こちらのディレクトリはサンプルです。
2.artisanコマンドでコントローラーを作成する
$ sail php artisan make:controller ExampleController
※sailコマンドは、パスを通していない場合は、下記で実行ください。
$ ./vendor/bin/sail
3.bladeを作成する
welcome.blade.phpをコピーしてexample.blade.phpを作成する。
※ $はターミナルのプロンプトを表現してますので、実行しなくて大丈夫です。
最初のプログラムを作ってみよう【コントローラー】
ExampleController.phpを下記内容にします。
最初のプログラムを作ってみよう【ビュー】
example.blade.phpを下記内容にします。
exampleブレードです。
最初のプログラムを作ってみよう【モデル】
1.Exampleモデルを作成する
$ sail php artisan make:model Example
skills/app/Models/Example.phpファイルが作成されます。
最初のプログラムを作ってみよう【マイグレーション作成】
1.マイグレーションファイルの作成をする
$ sail php artisan make:migration create_examples_table
skills/database/migrations/2021_08_20_110205_create_examples_tableのようなファイルが作成されます。
※2021_08_20_110205は日付です。実行時の日付が入ります。
id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('examples');
}
}
最初のプログラムを作ってみよう【マイグレーション実行】
1.マイグレーションファイルを実行する
$ sail php artisan migrate
データベース管理ツール【Workbench】のインストール
1.MySQL Workbenchのダウンロード
データベース管理ツール【Workbench】の設定
MySQL Workbenchの設定
1.[.env]ファイルの内容をWorkbenchに設定する
※:より左が項目名、右が入力名です。
Connection Name:skills
Default Schema:skills
Username:sail
Password:password
データベースシーダー作成
1.データベースシーダーを作成する
$ sail php artisan make:seeder ExampleSeeder
データベースシーダー実行
1.データベースシーダーを実行する
$ sail php artisan db:seed --class=ExampleSeeder
insert([
'id' => 10,
]);
}
}
データベースシーダーで挿入されたファイルを確認する
1.データベースに格納されているテーブルの中身を検索する
select * from examples;
コントローラーでモデルを利用する
1.ExampleController.phpにModelを記述します。
$examples = Example::all();
2.ExampleController.phpにview(example.blade.php)に変数($examples)を渡します。
return view('example', [
'examples' => $examples
]);
3.example.blade.phpで変数($examples)を受け取ります。
{{ $examples }}
$examples
]);
}
}
exampleブレードです。
{{ $examples }}
Laravel Breezeでログイン機能を実装する
$ sail composer require laravel/breeze --dev
$ sail php artisan breeze:install # breezeをインストールすると、tailwindcssの設定がされる。
$ sail npm install
$ sail root-shell
$ npm install -g npm@7.22.0
$ sail npm run dev
$ sail php artisan migrate
■sail npm installが失敗する場合
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: “npm”: executable file not found in $PATH: unknown
→ dockerのアップデート+docker buildで解決することがあります。
Laravel Breezeでログイン機能を日本語化する
1.日本語化(バリデーションなどの翻訳データ)データを下記からダウンロード
https://github.com/Laravel-Lang/lang
2.resources/lang/jsに配置してja.jsonは、lang配下におく
resources/lang/ja.json
日本語化(バリデーションなどの翻訳データ)
https://github.com/Laravel-Lang/lang
・Document
https://readouble.com/laravel/8.x/ja/localization.html
スキルテーブルを作成する
1.Skillsモデルの作成
$ sail php artisan make:model Skill
2.マイグレーションファイルの作成をする
$ sail php artisan make:migration create_skills_table
3.マイグレーションファイルを修正する
2021_08_23_233710_create_skills_table.php # こちらは「日付_create_skills_table.php」のファイルが作成されます。
Schema::create('skills', function (Blueprint $table) {
$table->id();
$table->string('skill_name');
$table->integer('skill_status');
$table->timestamps();
});
4.マイグレーションファイルを実行する
$ sail php artisan migrate
5.データベースシーダーを作成する
$ sail php artisan make:seeder SkillSeeder
下記をseederに追記。
use Illuminate\Support\Facades\DB;
DB::table('skills')->insert([
['skill_name' => 'PHP', 'skill_status' => 1],
['skill_name' => 'Laravel', 'skill_status' => 2],
['skill_name' => 'JavaScript', 'skill_status' => 3],
]);
6.データベースシーダーを実行する
$ sail php artisan db:seed --class=SkillSeeder
id();
$table->string('skill_name');
$table->integer('skill_status');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('skills');
}
}
insert([
['skill_name' => 'PHP', 'skill_status' => 1],
['skill_name' => 'Laravel', 'skill_status' => 2],
['skill_name' => 'JavaScript', 'skill_status' => 3],
]);
}
}
スキルテーブルの定数を設定する
6.データベースシーダーを実行する
const SKILL_STATUS_NOT_YET = 1;
const SKILL_STATUS_LEARNING = 2;
const SKILL_STATUS_LEARNED = 3;
const SKILL_STATUS_RELEARN = 4;
const SKILL_STATUS_MASTER = 5;
const SKILL_STATUS_NAME_NOT_YET = '未学習';
const SKILL_STATUS_NAME_LEARNING = '学習中';
const SKILL_STATUS_NAME_LEARNED = '学習済';
const SKILL_STATUS_NAME_RELEARN = '再学習';
const SKILL_STATUS_NAME_MASTER = 'マスター';
const SKILL_STATUS_OBJECT = [
self::SKILL_STATUS_NOT_YET => self::SKILL_STATUS_NAME_NOT_YET,
self::SKILL_STATUS_LEARNING => self::SKILL_STATUS_NAME_LEARNING,
self::SKILL_STATUS_LEARNED => self::SKILL_STATUS_NAME_LEARNED,
self::SKILL_STATUS_RELEARN => self::SKILL_STATUS_NAME_RELEARN,
self::SKILL_STATUS_MASTER => self::SKILL_STATUS_NAME_MASTER,
];
スキルデータの表示【Read】
1.ログインしているユーザは、skill配下を閲覧できるようにする。
Route::middleware(['auth'])->prefix('skill')->group(function () {
Route::get('/', [SkillController::class, 'index'])->name('skill');
});
2.dashboard.blade.phpを元に、skill/index.blade.phpファイルを作成する。
skillディレクトリは自分で作成する。
3.ExampleController.phpを元にSkillController.phpをコピーして作る
4.layouts/navigation.blade.phpにスキルを追加する。
5.tailwindcssのtable-layoutのページからテーブルのサンプルをとってきて、skill/index.blade.phpに設定する。
6.テーブルに@foreachでSkillsテーブルの値を表示させる
■補足
・tailwindcss
テーブル
https://tailwindcss.jp/docs/table-layout
Form
https://v1.tailwindcss.com/components/forms
下記を元に気に入ったものを利用する
https://tailblocks.cc/
@foreachは、処理を繰り返します。
@foreach($skills as $skill)
{{ $skill }}
@endforeach
スキル
ID
スキル名
ステータス
@foreach($skills as $skill)
{{ $skill->id }}
{{ $skill->skill_name }}
{{ \App\Models\Skill::SKILL_STATUS_OBJECT[$skill->skill_status] }}
@endforeach
{{ $skills->links() }}
スキルデータの表示【ページネーション】
1.SkillContorllerでpaginateを指定する。
$skills = Skill::paginate(2);
2.skill/index.blade.phpに下記を追加する
{{ $skills->links() }}
https://readouble.com/laravel/8.x/ja/pagination.html
ペジネーションビューのカスタマイズ
sail php artisan vendor:publish –tag=laravel-pagination
スキルデータの表示【詳細ページ】
1.tailwindcssのformをコピーして、skill/detail.blade.phpを作成する
https://v1.tailwindcss.com/components/forms
■補足
・tailwindcss
Form
https://v1.tailwindcss.com/components/forms
ボタン(button)
https://v1.tailwindcss.com/components/buttons#app
詳細:青
変更:オレンジ
削除:赤
戻る:グレー
下記を元に気に入ったものを利用してもいい。
https://tailblocks.cc/
・センターによせたい
flex justify-center
スキル
スキルデータの作成【Create】
1.ルーティング
web.phpにnewを追加する
2.コントローラー
SkillController.phpのnewを追加する。
3.view
new.blade.phpをdetail.blade.phpから追加する。
4.ルーティング
web.phpにcreateを追加する
5.コントローラー
SkillController.phpにcreateを追加する。
middleware(['auth'])->name('dashboard');
Route::middleware(['auth'])->prefix('skill')->group(function() {
Route::get('/', [SkillController::class, 'index'])->name('skill');
Route::get('/detail/{id}', [SkillController::class, 'detail'])->name('skill.detail');
Route::get('/new', [SkillController::class, 'new'])->name('skill.new');
Route::post('/create', [SkillController::class, 'create'])->name('skill.create');
});
require __DIR__.'/auth.php';
$skills
]);
}
public function detail($id)
{
$skill = Skill::find($id);
return view('skill.detail', [
'skill' => $skill
]);
}
public function new()
{
return view('skill.new');
}
public function create(Request $request)
{
$skill = new Skill();
$skill->skill_name = $request->input('skill_name');
$skill->skill_status = $request->input('skill_status');
$skill->save();
return redirect('skill');
}
}
スキル
ID
スキル名
ステータス
@foreach($skills as $skill)
{{ $skill->id }}
{{ $skill->skill_name }}
{{ \App\Models\Skill::SKILL_STATUS_OBJECT[$skill->skill_status] }}
@endforeach
{{ $skills->links() }}
スキル新規登録
スキルデータの表示【フラッシュメッセージ】
1. tailwindcss flass messageでgoogle検索する
vuejsを入れる
$ sail composer require laravel/ui -- 下のコマンドを使うために実行する
$ sail php artisan ui vue -- このコマンドでvuejsがインストールされる
$ sail npm install
$ sail npm run dev
webpackがsassになってしまった。
mix.js('resources/js/app.js', 'public/js')
.vue()
// .sass('resources/sass/app.scss', 'public/css');
.postCss('resources/css/app.css', 'public/css', [
require('postcss-import'),
require('tailwindcss'),
require('autoprefixer'),
]);
->with('status', 'スキルを作成しました。');
@if(session('status'))
{{ session('status') }}
@endif
スキルデータの表示【フラッシュメッセージ】
1.vueをインストールする
$ sail composer require laravel/ui
$ sail php artisan ui vue
2.tailwindcssがうまく表示されない場合は、下記をwebpack.mix.jsに上書き貼り付けしてください。
sail php artisan ui vueコマンドを実行すると、webpack.mix.jsファイルが上書きされてしまうようです。
const mix = require('laravel-mix');
/*
|--------------------------------------------------------------------------
| Mix Asset Management
|--------------------------------------------------------------------------
|
| Mix provides a clean, fluent API for defining some Webpack build steps
| for your Laravel application. By default, we are compiling the Sass
| file for the application as well as bundling up all the JS files.
|
*/
mix.js('resources/js/app.js', 'public/js')
.vue()
// .sass('resources/sass/app.scss', 'public/css');
.postCss('resources/css/app.css', 'public/css', [
require('postcss-import'),
require('tailwindcss'),
require('autoprefixer'),
]);
3.webpack.mix.jsで設定した内容を反映させるために、下記コマンドを実行します。
sail npm run dev
もし、下記のようなメッセージが表示されたら、
Additional dependencies must be installed. This will only take a moment.
Running: npm install vue-loader@^15.9.7 –save-dev –legacy-peer-deps
Finished. Please run Mix again.
上記のRunningの箇所にあるように、下記コマンドを実行してみてから、再度「sail npm run dev」を実行してみてください。
$ sail npm install vue-loader@^15.9.7 --save-dev --legacy-peer-deps
スキルデータの更新【Update】
middleware(['auth'])->name('dashboard');
Route::middleware(['auth'])->prefix('skill')->group(function() {
Route::get('/', [SkillController::class, 'index'])->name('skill');
Route::get('/detail/{id}', [SkillController::class, 'detail'])->name('skill.detail');
Route::get('/new', [SkillController::class, 'new'])->name('skill.new');
Route::get('/edit/{id}', [SkillController::class, 'edit'])->name('skill.edit');
Route::post('/create', [SkillController::class, 'create'])->name('skill.create');
Route::patch('/update', [SkillController::class, 'update'])->name('skill.update');
});
require __DIR__.'/auth.php';
$skills
]);
}
public function detail($id)
{
$skill = Skill::find($id);
return view('skill.detail', [
'skill' => $skill
]);
}
public function new()
{
return view('skill.new');
}
public function create(Request $request)
{
$skill = new Skill();
$skill->skill_name = $request->input('skill_name');
$skill->skill_status = $request->input('skill_status');
$skill->save();
return redirect('skill')->with('status', 'スキルを作成しました。');
}
public function edit($id)
{
$skill = Skill::find($id);
return view('skill.edit', [
'skill' => $skill
]);
}
public function update(Request $request)
{
$skill = Skill::find($request->input('id'));
$skill->skill_name = $request->input('skill_name');
$skill->skill_status = $request->input('skill_status');
$skill->save();
return redirect('skill')->with('status', 'スキルを更新しました。');
}
}
スキル
@if(session('status'))
@endif
ID
スキル名
ステータス
@foreach($skills as $skill)
{{ $skill->id }}
{{ $skill->skill_name }}
{{ \App\Models\Skill::SKILL_STATUS_OBJECT[$skill->skill_status] }}
@endforeach
{{ $skills->links() }}
スキル