じろう
2019年11月02日に参加
学習履歴詳細
[Laravel][Docker]環境構築ハンズオンをやる。それで作ったリポジトリをクローンし画像アップロードのサンプルアプリを作成(途中)
今日のYWT
やったこと
Dockerによる環境構築ハンズオン
【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン
- このチュートリアルをこなし、Laravel6系のLaradock環境をGitHubにデプロイ
Laravelで画像アップロード機能のチュートリアル
[Laravel6]画像アップロード方法を懇切丁寧に解説します
- 上のDockerハンズオンで作ったリポジトリをクローンし、環境構築
- mysqlの設定だけ書き換える必要がある
Laravel Collectiveのインストール
Laravel Collective(Formファサード まとめ)
docker-compose exec app composer require "laravelcollective/html":"6.*"- Formファサードが使えるようになる
カラムの追加
file_pathという名前のカラムを追加したdocker-compose exec app php artisan make:migrate add_file_path_to_users_table --table=users- Add: file_pathカラム追加のマイグレーションファイル
- ただしこのファイルではカラム名のスペルミスをしている
- 上で作ったDockerのリポジトリに間違えて
pushしてしまったため、git resetでローカルから変更を取り消し、履歴をpushしなおした - git push の取り消し方法
indexとcreateにviewを返すための追記
return view('users.create')でviewを返してあげないと、viewファイルを表示してくれない
doesn't have a default valueというエラーへの対処
- databaseの設定ファイルを書き換える
strict = false
カラムをnullableに変更
- フォーム送信ボタンを押すと値がnullだよと怒られた
以下のように記述しnullableに
public function up() { Schema::table('users', function (Blueprint $table) { $table->string('email')->nullable()->change(); $table->string('password')->nullable()->change(); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->string('email')->nullable(false)->change(); $table->string('password')->nullable(false)->change(); }); }
change_columnするにはdoctrine/dbalというライブラリが必要と言われたので導入した
わかったこと
Dockerの便利さ
- 一度環境構築してしまえばあとはgit cloneしてくれば手元にlaravel環境ができる素晴らしさ
- ブランチ切って、laravelのバージョンやデータベースを変えることでやりたい放題かもしれない
pushしたあと、その履歴を消す方法
git reset --hard 該当するコミットのハッシュ
git revert 該当するコミットのハッシュ
この2つがある。
最初は下のgit revertでやろうと思ったが、git revert HEAD~3で頭から4つ分のコミットを打ち消すと書いてあったがうまくいかなかったのでgit resetした。
git resetすると該当コミット部分までの変更がローカルでもなかったことにされるので注意。
カラムの変更にはライブラリが必要
doctrine/dbal
User::All();を使うにはモデルを作成する必要がある
- モデルには以下の様な記述だけでもよい
<?php namespace App; use Illuminate\Database\Eloquent\Model;
- こうすることで、コントローラで
User::All();が使える
viewファイルへのデータの渡し方
コントローラにて、下記のように第二引数に記述する
<?php namespace App\Http\Controllers; use App\User; # 追加 use Illuminate\Http\Request; class UsersController extends Controller { public function index() { $users = User::all(); # 追加 return view('users.index', ['users' => $users]); # ['users' => $users]を追記 } }
未解決点
- コントローラに記述した
\App\Userとは何か?
public function store(Request $request) { $request->validate([ 'name'=>['required','string','max:255'], 'file_path'=>['file','mimes:jpeg,png,jpg,bmb','max:2048'], ]); $path = ''; if($file = $request->file_path){ $path = $file->store('uploads'); } \App\User::create([ 'name'=>$request->input('name'), 'file_path'=> $path, ]); }
- なぜ
public/uploadsフォルダに画像が保存されないのか? - なぜ
Userにnameだけ入って画像のパスが入ってくれないのか?
次やること
- 画像アップロードの実装を終わらせる
PHP
Docker
Laravel
2020年10月10日(土)
8.6時間