laravel 5 增加一組route group 設定

我今天要增加一組route controller與 route檔案
名字叫ajax
要到 class RouteServiceProvider 修改
1.增加namespace
protected $cust_namespace = ‘App\Http\Controllers\ajax’;
2.
去map route增加一組設定
$this->mapAjaxRoutes();
3.增加method mapAjaxRoutes

protected function mapAjaxRoutes()
{
Route::prefix(‘ajax’)
->middleware(‘ajax’)
->namespace($this->cust_namespace)
->group(base_path(‘routes/ajax.php’));
}

 

完整設定會是這樣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php 
namespace App\Providers; 
use Illuminate\Support\Facades\Route; 
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; 
class RouteServiceProvider extends ServiceProvider { 
/** * This namespace is applied to your controller routes. * * In addition, it is set as the URL generator's root namespace. * * @var string */ 
    protected $namespace = 'App\Http\Controllers'; 
    protected $cust_namespace = 'App\Http\Controllers\ajax'; /** * Define your route model bindings, pattern filters, etc. * * @return void */ 
 
     public function boot() { // parent::boot(); } 
 
     /** * Define the routes for the application. * * @return void */ 
    public function map() { $this->mapApiRoutes();
        $this->mapAjaxRoutes();
        $this->mapWebRoutes();
 
        //
    }
 
    /**
     * Define the "web" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapWebRoutes()
    {
        Route::middleware('web')
             ->namespace($this->namespace)
             ->group(base_path('routes/web.php'));
    }
 
    /**
     * Define the "api" routes for the application.
     *
     * These routes are typically stateless.
     *
     * @return void
     */
    protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }
    /**
     * Define the "Ajax" routes for the application.
     *
     * These routes all receive session state, CSRF protection, etc.
     *
     * @return void
     */
    protected function mapAjaxRoutes()
    {
        Route::prefix('ajax')
            ->middleware('ajax')
            ->namespace($this->cust_namespace)
            ->group(base_path('routes/ajax.php'));
    }
}

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即可