- 投稿日:2020-10-22T22:14:50+09:00
Laravel:バリデーションをスマートかつ、任意メッセージを作成
【概要】
1.結論
2.どのようにコーディングするか
3.開発環境
1.結論
FormRequestを作成し、rulesに検証ルールを用いて、messagesメソッドで任意のメッセージを記載する!
2.どのようにコーディングするか
まずFormRequestを作成します。
php artisan make:request HogeRequest
なぜFormRequestを作成するのかというと、その方が機能としてスマートだからです。Controllerにも記載することは可能ですが、コントローラーはViewやModelに指示を送る橋渡し役がメインになります。バリデーションをする役目ではなく、クライアントからリクエストされた際にリクエスト内部でバリデーションの機能を実行した方がスマートだからです。
上記で作成した後にControllerに下記の記載を忘れないでください。
app/HttpControllers/HogeController.phpuse App\Http\Requests\HogeRequest;このように記載しないと下記に記載するHogeRequest.phpが機能しません。
app/Http/Requests/HogeRequest.php<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class HogeRequest extends FormRequest { public function authorize() #---❶ { if ($this->path() == 'hoge') #---❷ { return true; }else{ return false; } } public function rules() #---❸ { return [ 'name' => 'required', 'mail' => 'email', 'age' => 'numeric|between:0,150', ]; #---❹ } public function messages() #---❺ { return [ 'name.required' => '名前は必須です', 'mail.email' => '適切なemailを入力してください', 'age.numeric' => '年齢は整数で入力してください', 'age.between' => '適切な値を入力してください' ]; #---❻ } }❶:authorizeで、FormRequestが許可されているかどうかチェックします。
❷:アクセスしたパスをチェックしています。hoge以外は通さないようにしています。
❸:rulesで、バリデーションの機能を果たしています。
❹:blade.php(view)におけるname要素(name,mail,age)を指定し、検証ルール(required,email,numeric|between)に則ってコーディングしています。
❺:FormRequestのmessagesメソッドをオーバーライドしています。つまり親クラス(FormRequest)のメソッドを子クラス(HogeRequest)で再定義しています。記述していないルールがあった場合は親クラスがそのままレンダリング(英語表記)されます。
❻:❹と同じようにコーディングします。その際に'name要素.検証ルール(❹で設定したルール)' => '任意のメッセージ'を記載すると、アプリ制作者が意図したメッセージを表示できます。
3.開発環境
PHP 7.4.10
Laravel 8.9
- 投稿日:2020-10-22T21:19:04+09:00
Laravelで日本語化
はじめに
Laravelバージョン5,6,7で対応。
ログイン画面、エラーメッセージなどを英語表記から日本語表記へ変更する。app.phpの記述を変更
config/app.php'locale' => 'en', // 変更 'locale' => 'ja',GitHubで日本語化ファイルをダウンロード
こちらからダウンロード。
Code(緑色のアイコン)
→Download ZIP
でダウンロードできる日本語化ファイルを配置
1.ダウンロードしたファイルを解答し、開く。(ファイル名:lang-master)
2.
src
フォルダ内のja
フォルダをプロジェクト内のresoueces/lang
フォルダ直下に配置。3.
json
フォルダ内のja.json
ファイルをプロジェクト内のresoueces/lang
フォルダ直下に配置。上記のように配置されていればOK!
- 投稿日:2020-10-22T21:17:24+09:00
Laravel8でjetstream
新しくアプリを作るので、Laravel8を使ってモダンなログイン環境を手に入れられるjetstreamを入れてみました。
導入に際して、すんなりといかない箇所があったので、コマンドをまとめておきます。
npmは事前に導入してある想定です。php artisan config:cache php artisan route:cache composer require laravel/jetstream php artisan jetstream:install livewire php artisan migrate npm install npm run dev php artisan config:cache php artisan route:cache解説すると、おまじないのように以下を唱えないとcomposer実行時にエラーが発生した。
php artisan config:cache php artisan route:cacheまた、一度エラーになってしまった場合は、以下を実行してから再度トライ。
composer remove laravel/jetstreamこれで、ホーム画面を開くと、右上にRegisterとLoginが表示されていると思います。
- 投稿日:2020-10-22T15:15:32+09:00
テーブル定義変更にて、composer require doctrine/dbal 失敗!
Laravelを使って作業中tableに仕様変更が入った!
とあるカラムをnullable()にするとのこと...
テーブルの再定義すりゃええんやねぇ〜(余裕余裕)...
?あれ。で、できない...
作業フロー
①テーブル再定義のmigrationファイル作る
php artisan make:migration ModifyProjects②migrationファイルを書いてゆくーー
//①で作ったmigrationファイル public function up() { Schema::table('変えたいカラムがあるテーブル名', function (Blueprint $table) { $table->integer('変えたいカラム名前')->nullable()->change(); }); }③ターミナルにて以下のコマンド実施
※これを入れることで『->change()』が使える様になる!composer require doctrine/dbalあ、あれ?エラー出るんだが... (o_o)/ンゴォ
※これがスムーズに入れば超簡単な作業ゾエラー①
mmap() failed: [12] Cannot allocate memory mmap() failed: [12] Cannot allocate memory PHP Fatal error: Out of memory (allocated 400556032) (tried to allocate 1359872 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 462 Fatal error: Out of memory (allocated 400556032) (tried to allocate 1359872 bytes) in phar:///usr/local/bin/composer/src/Composer/Util/RemoteFilesystem.php on line 462ふむふむ。。。
メモリがどーのこーの言われてんなぁ。
(エラー文コピペでググる!)swapファイル2GB作れば行けそうやなぁ...
※主は1GBずつチマチマ作ります...//一気に2GB作る sudo dd if=/dev/zero of=/swapfile bs=1M count=2048 sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile //正常にできてるか確認 free -h total used free shared buff/cache available Mem: 983M 109M 72M 32K 801M 732M Swap: 2.0G 0M 2.0G //できてる!!!!!!はーいもうできるンゴ!(慢心)
※結果から言うとまだできないよ!//慢心で打ちました。 composer require doctrine/dbalエラー②
PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223 Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/local/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223 Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.[ec2-user@ip-172-31-35-16 paylove]$ php -r "echo ini_get('memory_limit').PHP_EOL;"さっきとちょっと違うエラーだね!
このエラーは親切なことに一番下に『Check』とリンク貼ってくれてる!///リンク踏むと解決方法出てくる! php -r "echo ini_get('memory_limit').PHP_EOL;" sudo vi /etc/php.ini ↑このファイルの中身書き換える//php.iniの中 ; Maximum amount of memory a script may consume (128MB) ; http://php.net/memory-limit ;memory_limit = 128M memory_limit = -1これでできるはず!
composer require doctrine/dbalおし!入った!
④migrateしていくヨーーン
php artisan migrate
てな感じでテーブルの定義変更できましたぁ〜(@0@)///
- 投稿日:2020-10-22T12:09:29+09:00
config内で連想配列を参照,変更する場合
config/○○.php'hoge' => [ 'id' => env('KEY'), 'secret' => env('SECRET'), 'redirect' => env('CALLBACK'), ],があった場合
$id = config('○○.php.hoge.id');//configの値や文字列を$idに代入 config(['○○.php.hoge.id','△△']);//configに代入したい値や文字列を'△△'に記述これでできます
配列のネストした要素をドット記法で取得できるらしいです
以下laravel非公式日本語ドキュメント引用
config関数は設定変数の値を取得します。設定値はファイル名とアクセスしたいオプションを「ドット」記法で指定します。デフォルト値が指定でき、設定オプションが存在しない時に返されます。
- 投稿日:2020-10-22T04:35:58+09:00
Laradockでもfish shellを使いたい!!
やること
- laradockで特にファイルをいじらずにlaravelの環境構築をするとデフォルトでzshが選択されているのでfishに変更します。
- ついでに、config.fishと.vimrcもローカルのものを持ってきます。
対象読者
- laravelの環境構築をサクッと終わらせてコーディングの学習に集中したい駆け出しエンジニア
- laradockでfishを使いたいけどdockerに疎い人(fishに行き着く人はだいたいdockerfileイジれる気もしますが...)
- 他の記事の通りにやるとworkspaceコンテナ内で/var/www/sample-projectのように余計に階層が増えて困っている人
作業
laradockを展開するディレクトリへ移動
cd laradockをインストールしたいディレクトリlaradockをインストール
git clone https://github.com/Laradock/laradock.git
- laradockというディレクトリができるはずです。
laradockディレクトリに移動
cd laradockworkspaceディレクトリにconfig.fishと.vimrcをコピー
cp ~/config/fish/config.fish ./workspace cp ~/.vimrc ./workspace./workspace/Dockerfileを編集
vim ./workspace/Dockerfile
- 以下を追記してくだい。
- 特に追記の場所は決まっていませんが、1388行目の後ろくらいにいれるといい感じになると思います。
- Dockerfileの他の部分ではif文を書いていますが、この辺が少しわからなかったのでif文は端折っています。詳しい方教えていただけると助かります。
########################################################################### # Fish: ########################################################################### RUN apt-get install -y fish RUN git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf RUN ~/.fzf/install RUN curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish RUN ["/usr/bin/fish", "-c", "fisher add jethrokuan/fzf"] RUN cp /root/.fzf/bin/fzf /usr/bin/ COPY config.fish /root/.config/fish/ ########################################################################### # .vimrc: ########################################################################### COPY ./.vimrc /root/.envファイルを作成・編集
cp env-example .env vim .env
- APP_CODE_PATH_HOST の箇所を
APP_CODE_PATH_HOST=../プロジェクト名
と編集してください。- phpのバージョンを指定したい場合はPHP_VERSION の箇所を編集してください。
- 直前の行に
# Accepted values: 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6
とバージョンが列挙されているのでこの中から指定するようにしましょう。- mysqlを使う場合
- PMA_PORT の箇所を
PMA_PORT=8081
と編集してください
- 他のポートと衝突しなければでなければ何でもいいです。
- ポートとかよくわかんねって方はとりあえず8081にしておけばOKです
- MYSQL_VERSION の箇所を
MYSQL_VERSION=5.7
と編集してください。
- mysqlは8系だとやたらエラーに遭遇したのでこだわりがなければ5.7が無難です。
- MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORDをlaravelに変更してください。
- ここは自由に指定していただいて大丈夫です。
- postgresqlを使う場合
- POSTGRERS_DATABASE, POSTGRES_USER, POSTGRES_PASSWORDをlaravelに変更してください。
- ここも自由に指定していただいて大丈夫です。
コンテナの起動
- ここまでお疲れさまでした。やっとコンテナを起動です。
- ここではnginx, mysqlを起動します。必ず現在のディレクトリがlaradock内であることを確認してください。
docker-compose up -d nginx mysqllaravelのインストール
- 今回は8系を入れます。
- 他バージョンがいい人はバージョン指定方法を調べてください。
docker-compose exec workspace composer create-project laravel/laravel ./プロジェクトディレクトリの確認
- APP_CODE_PATH_HOSTで
APP_CODE_PATH_HOST=../プロジェクト名
と指定したので、プロジェクトディレクトリが作成されたか確認しましょう。ls ..
- また、作成されたディレクトリの中も確認しましょう。
ls ../プロジェクト名 ○以下のように表示されればOK README.md bootstrap/ config/ phpunit.xml routes/ tests/ app/ composer.json database/ public/ server.php vendor/ artisan* composer.lock package.json resources/ storage/ webpack.mix.jsDBの設定
プロジェクトディレクトリに移動しましょう。
cd ../プロジェクト名.envを編集
vim .env
mysqlを使う場合
DB_CONNECTION=mysql
pgsqlを使う場合
DB_CONNECTION=pgsql
DB_HOSTを
127.0.0.1
からlaradock_mysql_1
に変更してください。
- ホスト名はコンテナ名にしないといけません。
- DBクライアント(mysql workbench, table plus, dbeaverなど)から接続するときは
127.0.0.1
と指定してください。DB_DATABASE, DB_USER, DB_PASSWORDを先程指定した値に変更してください。
- 記事の通りにしているならすべてlaravelです。
- うまく行かない場合はユーザー、パスワードをrootに変えて試してください。
DBの接続確認
laradockディレクトリに戻ります。
cd ../laradockそれではマイグレーションをしてみましょう。
docker-compose exec workspace php artisan migrate ○以下のように表示されればOK Nothing to migrate.phpstormからコンテナへの接続
こちらの記事からdockerの設定を済ませてください。
以下の画像の左側のContainersからworkspaceを右クリックし、execを選択してください。
新しいコマンドを作成されるように促されるのでfishと入力します。
最後に
- わからないことや改善点など気軽にコメントください。
- 気が向けばお返事します。