じろう

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という名前のカラムを追加した

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フォルダに画像が保存されないのか?
  • なぜUsernameだけ入って画像のパスが入ってくれないのか?

次やること

  • 画像アップロードの実装を終わらせる
PHP
Docker
Laravel

2020年10月10日(土)

8.6時間