20201022のlaravelに関する記事は6件です。

Laravel:バリデーションをスマートかつ、任意メッセージを作成

【概要】

1.結論

2.どのようにコーディングするか

3.開発環境

1.結論

FormRequestを作成し、rulesに検証ルールを用いて、messagesメソッドで任意のメッセージを記載する!


2.どのようにコーディングするか

まずFormRequestを作成します。

php artisan make:request HogeRequest

なぜFormRequestを作成するのかというと、その方が機能としてスマートだからです。Controllerにも記載することは可能ですが、コントローラーはViewやModelに指示を送る橋渡し役がメインになります。バリデーションをする役目ではなく、クライアントからリクエストされた際にリクエスト内部でバリデーションの機能を実行した方がスマートだからです。

上記で作成した後にControllerに下記の記載を忘れないでください。

app/HttpControllers/HogeController.php
use 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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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が表示されていると思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

テーブル定義変更にて、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@)///

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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関数は設定変数の値を取得します。設定値はファイル名とアクセスしたいオプションを「ドット」記法で指定します。デフォルト値が指定でき、設定オプションが存在しない時に返されます。

https://readouble.com/laravel/6.x/ja/helpers.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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 laradock

workspaceディレクトリに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_PASSWORDlaravelに変更してください。
      • ここは自由に指定していただいて大丈夫です。
  • postgresqlを使う場合
    • POSTGRERS_DATABASE, POSTGRES_USER, POSTGRES_PASSWORDlaravelに変更してください。
      • ここも自由に指定していただいて大丈夫です。

コンテナの起動

  • ここまでお疲れさまでした。やっとコンテナを起動です。
  • ここではnginx, mysqlを起動します。必ず現在のディレクトリがlaradock内であることを確認してください。
docker-compose up -d nginx mysql

laravelのインストール

  • 今回は8系を入れます。
  • 他バージョンがいい人はバージョン指定方法を調べてください。
docker-compose exec workspace composer create-project laravel/laravel ./

プロジェクトディレクトリの確認

  • APP_CODE_PATH_HOSTAPP_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.js

DBの設定

プロジェクトディレクトリに移動しましょう。

cd ../プロジェクト名

.envを編集

vim .env
  • mysqlを使う場合
    DB_CONNECTION=mysql

  • pgsqlを使う場合
    DB_CONNECTION=pgsql

  • DB_HOST127.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と入力します。

  • これでfishシェルでワークスペースコンテナで作業できます。
    この画像

最後に

  • わからないことや改善点など気軽にコメントください。
  • 気が向けばお返事します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む