Laravel雑記帳 ITかあさん

ITかあさん

Laravel 姓・名 別カラムの検索

Laravel 姓・名 別カラムの検索

first_name + last_name

姓と名が別のカラムで保存されていた場合、
「松田千尋」と検索してもヒットしません。

結論として、whereRawを使って、where節へ挿入する方法を取ります。

$query->whereRaw('CONCAT(last_name, "", first_name) LIKE ? ', '%' . $name . '%');

インジェクション対策として、第二引数に検索対象の文字列を入れます

参考

Laravel 5.8 データベース:クエリビルダ

MySQL select with CONCAT condition

LaravelでMySQLのZEROFILLをmigrationで実行する方法

LaravelでMySQLのZEROFILLをmigrationで実行する方法

Laravel
数値型がいい!でもゼロ埋めを許可するINT型といえばMySQLのZEROFILL。ゼロ埋めするならtext系の型にするのもありだけど、やっぱINT型のが速そうなのでやっぱここはZEROFILLで。

ALTER TABLE table_name ADD column_name INT ZEROFILL AFTER column_name2

(AFTER column_name2はcolumn_name2後に追加したいとき。)

これでゼロ埋めのカラムが追加されたけれど、残念ながらLaravelのmigrationはZEROFILL対応してないんで、migrationファイルに直でSQLを書いて実行してあげるほか無いようです。


Laravelが5になってもmigrationにZEROFILLは対応してないので、migrationに直接SQL書いて実行というパターンは変わらないです。

supervisorでQueue監視をしてみた時の話。

ちょっとハマったsupervisorのQueue監視。そもそも起動にすら失敗したのでクラウドメモ。

supervisord 起動までの手順

queue_6986035-1024x630

Queue管理といえばsupervisord。キュー管理といえばsupervisord。大事なことなので2回言いましたよ。
起動までに結構手間取ってしまったのでクラウドメモ。

supervisord インストール

epelリポジトリが入っているとyum でインストールが可能。

yum --enablerepo=epel install -y supervisor

/etc/supervisord.conf 設定変更

今回はLaravelのQueue管理として導入したので、対象となるコマンド、ディレクトリを設定します。

取り急ぎ、追記する形で対象のコマンドとディレクトリ、そしてログファイルを下の方に追記。

supervisordを起動!!

service supervisord start

何かエラる!

socket が行方不明のようだ

http_port=/var/tmp/supervisor.sock ; (default is to run a UNIX domain socket server)
[FAILED]

ソケットのありかを探す

find . -name "supervisor.sock" -ls

supervisor.sockなんてない!!!

なんかこういうの、MySQLのインストに失敗してmysql.sockが無いって言われるのとなんか似てるぞ。。?

困ったときは公式をチェック

sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock

(touchしてsockファイルを作れと。)

issuで作られたsockの場所がたまた/var/run/下な訳であって、必ずしもこのディレクトリに作ることは必須では無いと思われ。
私はとりあえずissuと同じディレクトリで作りました。

上記手順でsockを作ったら再度/etc/supervisord.confをひらいてsockのパスを修正。

supervisordを起動!!

[root@laravel]# service supervisord start
Starting supervisord: Unlinking stale socket /var/run/supervisor.sock
[ OK ]

めでたしめでたし!

監視したい機能が他にもあったら[program:プログラム名称]でどんどん設定すればよろしいはず。
コマンドとディレクトリとログファイルを設定すればよし。

Laravel 5 collectionを使った必ず記号も含まれるランダムパスワード

str_ramdom()を使うより、もう少し強固な必ず記号も含まれるランダムなパスワードを生成したい

Laravel
Larvalで以下のようにするとランダムな10文字を生成できます。パスワードリセット時などに便利

echo str_ramdom(10);
//Aek3Gkfk89

ただしパスワード設定の仕様がもう少し強固で、

  • 必ず半角大文字と半角小文字が入る
  • 数字を一つ以上含む
  • 記号を一つ以上含む

という「必ず大文字や数字や記号をそれぞれ含めなければならない」というルール縛りがあるとただランダムな文字列を生成するだけでは足りない場合があります。
(生成された文字がただのランダムだと、大文字や数字が一切含まれないということは当然発生しうる)

必ず仕様に乗っ取る強固なパスワードを生成する手順

      a から zの小文字配列をランダムで生成して指定数 配列を抽出
      Aから Zの小文字配列をランダムで生成して指定数 配列を抽出
      0から 9の整数を配列をランダムで生成して指定数 配列を抽出
      パスワードに使える記号を配列に。指定した数だけ 配列を抽出
      1~4までの手順で生成された配列を合体
      5の手順で合体した配列を文字列に変換し、シャッフル

4番目の記号は以下の通りとした

! $ % & ‘ ( ) * + , / ; < = > ? [ ] ^ { } ~

ランダムにいきなりとりだすのではなく、半角英字と数字、記号をそれぞれ別々に取り出してから 合体させて 最後にシャッフルすること。

Laravel5で 必ず数字や記号が含まれるランダムなパスワードの生成の例


CollectionはLaravelで配列からいい感じに配列を抽出できるヘルパーです。

ついでに非Laravelerの人へ捧ぐ、同じような強固なパスワード生成


array_flipは優秀だということがわかった。

Laravel5 正規表現 validataion

Laravel5 正規表現validataion

Laravel5 validataionには正規表現チェックがあるみたい。
validataionで正規表現チェック毎にカスタムバリデーション作ってあげるのかなあと思っていたら違うようですね。

regex

なお、下記は電話番号の正規表現。

regex:/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/
$this->validate($request,[
‘tel’ => ‘required|regex:/^[0-9]{2,4}-[0-9]{2,4}-[0-9]{3,4}$/’,
]);

ッオー。楽チン

Laravel 5 現在のパスワードを入力チェックする

Laravel 5 custom validation old password check

Laravel
windowsのログオン画面でもお馴染み、現在のパスワードを入力して新しいパスワードを設定するあれ、作ります。
今回はLaravel 5 custom validationにて追加します。

STEP1 making new validation class

STEP2 add new class to boot

STEP3 load new validation in controller ’new validation:$password’

STEP1 making new validation class

app/Validation/OldPassWordValidator.php
まずはvalidation Classを用意します。$valueにはフォームの入力値が入り、$parametersは比較の対象が入ります。
今回パスワードはハッシュ化されていることを想定するので、Hash::checkを使うことでハッシュ化されたデータに違いがないかboolで結果が取れます。

STEP2 add new class to boot

app/Providers/AppServiceProvider.php
bootへ新しいvalidation classを追加。これでvalidationとして使うことができます。

STEP3 load new validation in controller

あとは通常のvalidationと同様にcontrollerにセットすれば使うことができます。

参考

Laravel 5パスワード確認フォームを作る

Laravel 5:making confirmed password form

Laravel
最近仕事でLaravelを使うようになりまして、覚えたことをブログにまとめていきたいと思います。今回はパスワード再入力フォームを作る手順です。

STEP1 create view file

STEP2 create validation file

STEP3 set validations in controller ’same:form-name’

STEP1 create view file

まずはviewファイルを作ります。

STEP2 create validation file

日本語でバリデーションを作る場合は resources/lang/ja/validation.phpを作る
resources/lang/en/validation.php よりコピー。
jaフォルダへvalidation.phpを設置。
resources/lang/ja/validation.php

STEP3 set validations in controller ’same:form-name’

validationをcontrollerにセットする。password_confirmがpasswordフォームと同じかどうかはsame:password とすれば良い

参考

パスワードチェックに関する参考

Laravel 5.0 バリデーション

エラーメッセージに関する参考

Laravelのデフォルトログイン処理でエラーメッセージを日本語にしたい