laravel validator note – unique與exists

laravel validator 這兩個功能非常的強大阿~~~

unique >輸入值必須是唯一值

exists >輸入值必須存在

他可以透過orm的方式讀取db資料,然後判斷輸入的值是否存在於資料表中,根本是大神級的好用阿

範例
id值必須存在否則輸出錯誤
exists:table名稱,欄位名稱

1
2
3
4
5
6
7
8
9
10
11
12
$info['id']=10; 
$validator = Validator::make(
            $info,
            [
                'id' => 'exists:table_name,id',
 
            ]
        );
if ($validator->fails()) {
            return response()->json(['status'=>422,'message'=>'Validate Error','errors'=>$validator->errors()],422,[],JSON_UNESCAPED_UNICODE);
 
}

範例
帳號是否存在,存在則輸出錯誤
unique :table名稱,欄位名稱

1
2
3
4
5
6
7
8
9
10
11
12
$info['username']='Mike'; 
$validator = Validator::make(
            $info,
            [
                'id' => 'unique :table_name,username',
 
            ]
        );
if ($validator->fails()) {
            return response()->json(['status'=>422,'message'=>'Validate Error','errors'=>$validator->errors()],422,[],JSON_UNESCAPED_UNICODE);
 
        }

laravel validator note – regex rule

laravel的 Validator是個強大的工具
但是他在用regxp2的時候,會有一個特殊的寫法
他必須是要用陣列
否則會出現
preg_match(): No ending delimiter ‘/’ found

這個是一般的寫法
用|增加RULE

1
$ruleArr['id']= 'required|numeric|exists:book,id';

這個是REGXP的寫法

1
$ruleArr['version']=["required","regex:/^(\d+\.)?(\d+\.)?(\*|\d+)$/"];

laravel 清除cache

laravel 幾種cache清除指令

基本 cache
$ php artisan cache:clear

route cache
$ php artisan route:cache

config cache
在新刪修config以後要重新跑一次

$ php artisan config:cache

laravel 5.6 以後廢棄的優化指令,5.4以前通用 ,5.5以後因為走了php 7,這個版本對op-cache有最佳化,所以廢了

$ php artisan optimize

laravel 5.6 passport Unauthenticated

基本上問題在access token

預設安裝的情況下,laravel使用的grant_type是passport
所以在大多數的教學中,他需要先登入後取得access_token, 然後再設定header使用 Authorization: Bearer access_token
BUT
如果你使用的是client_credentials….
你就會拿到UNAUTHENTICATED

需要調整相關的設定
1.app/Http/Kernel.php
增加以下程式
use Laravel\Passport\Http\Middleware\CheckClientCredentials;
protected $routeMiddleware = [
‘client’ => CheckClientCredentials::class,
];

2.修改api route middlerware

Route::get(‘/user’, function(Request $request) {

})->middleware(‘client’);

把middleware改成client即可

docker ip 查詢 – how to get docker container’s ip

大部分查詢docker ip的時候 都是用 docker-machine

docker-machine ip [machine name]

但是如果沒有docker machine呢?

使用指令
docker inspect

先查詢docker container
docker ps -a

4aed2ceb06c0 mysql:5.7 “docker-entrypoint.s…” 12 minutes ago Up 12 minutes 127.0.0.1:3306->3306/tcp mysql57

docker inspect mysql57

[以上省略]

“Gateway”: “172.20.0.1”,
“IPAddress”: “172.20.0.2”,

這樣就可以知道 container ip 是多少了

升級 centos 7 Kernel 4.x

嚴格說不算升級
算是另外裝一組新的kernel

如果你要在centos 7使用比較新版本的docker,那你必須升級kernel,但內建的kernel只有3.10
所以必須安裝一個相對應的kernel

1.安裝 epel
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
2.安裝kernel
yum –enablerepo=elrepo-kernel install kernel-ml
3.重開機
在選單內就可以看到新的kernel

如果要改預設開機選單 讓4.x 變成預設開機
1.看安裝後的選單項目
awk -F\’ ‘$1==”menuentry ” {print i++ ” : ” $2}’ /etc/grub2.cfg

會展示妳的選單
例如這樣

0 : CentOS Linux (4.13.4-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-1e36f8e932db4dc5b799fd4a613ecb0f) 7 (Core)

我要把第一個設定為預設開機選項
grub2-set-default 0

查看設定結果
grub2-editenv list
會出現
saved_entry=0
代表成功了
這時候重開機 就可以跑4.x的kernel了