今日の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だけ入って画像のパスが入ってくれないのか?
次やること
画像アップロードの実装を終わらせる