Luthier CI 中介軟體 Middleware
中介軟體 Middleware
內容 Contents
- 中間值執行點Middleware execution points
-
分配中間值
-
執行中介軟體
- 中介軟體引數Middleware parameters
介紹 ( Introduction )
將中介軟體視為一組層,請求必須在您的應用程式中通過才能到達資源。
例如,使用中介軟體,您可以驗證使用者是否已登入並具有足夠的許可權來訪問應用程式的某些部分,否則將其重定向到其他位置。
實際上,中介軟體是控制器的擴充套件,因為框架的單例已經在此時構建,您可以使用該ci()函式來獲取它。
中介軟體執行點 (Middleware execution points )
有兩個執行點:
pre_controller post_controller
控制器建構函式始終首先執行
這是CodeIgniter的行為,而Luthier CI不會對其進行修改。
在某些時候您可能需要在中介軟體之前執行程式碼,這樣做的方法是在控制器中定義一個名為的公共方法preMiddleware:
<?php # application/controllers/TestController.php defined('BASEPATH') OR exit('No direct script access allowed'); class TestController extends CI_Controller { public function preMiddleware() { // This will be executed after the constructor (if it exists), but before the middleware } }
作為路由在回撥中不可用
當您使用回撥作為路由時,無法在中介軟體之前執行任意程式碼
建立一箇中間件 ( Create a middleware )
所有中介軟體必須儲存在application/middleware資料夾中。中介軟體是任何帶有run()公共方法的PHP類。
例:
<?php # application/middleware/TestMiddleware.php class TestMiddleware implements Luthier\MiddlewareInterface { public function run() { // This is the entry point of the middleware } }
實現MiddlewareInterface
介面將是強制性的
從0.3.0版本開始,使用未實現LuthierMiddlewareInterface
介面的中介軟體類是DEPRECATED並將在下一版本中停止工作
為了在應用程式中分配中介軟體,必須同時使用類的名稱和檔案的名稱。另外,請注意不要使用與框架中的其他資源相同的名稱,例如控制器,模型,庫等。
新增Middleware 字尾
避免衝突的一種方法是將Middleware 字尾新增到中介軟體名稱。
從命令列建立中介軟體
如果已啟用Luthier CI的內建CLI工具,請使用該luthier make middleware [name]
命令建立新的中介軟體
分配中介軟體 ( Assign a middleware )
您可以在應用程式的不同上下文中分配中介軟體:
全球中介軟體 (Global middleware )
要在全域性上下文中定義中介軟體,請使用以下語法:
Route::middleware([name], [exec_point?]);
name
i中介軟體的名稱在哪裡,exec_point
是執行點,預設情況下是pre_controller
.
您可以使用匿名函式而不是中介軟體的名稱:
Route::middleware(function(){ ci()->load->view('global_header'); });
路由中介軟體 ( Route middleware )
在route group
上下文中,中介軟體是另一個屬性,因此它位於方法的第三個引數中group()
:
Route::group('site', ['middleware' => ['AuthMiddleware']], function(){ });
最後,在individual route 上下文中,中介軟體也是另一個屬性,因此它在第二個引數中
Route::put('foo/bar','controller@method', ['middleware' => ['TestMiddleware']]);
僅在pre_controller點將
中介軟體分配給路由和路由組時,執行點始終為pre_controller
執行中介軟體 ( Run a middleware )
要從控制器執行中介軟體,請使用屬性的run()
方法middleware
:
<?php # application/controllers/TestController.php defined('BASEPATH') OR exit('No direct script access allowed'); class TestController extends CI_Controller { public function __construct() { $this->middleware->run('AuthMiddleware'); } }
中介軟體引數 ( Middleware parameters )
該屬性的run()
方法middleware
支援帶有中介軟體引數的第二個引數:
// $args can be any variable type: $args = ['foo' => 'bar']; $this->middleware->run('AuthMiddleware', $args);
外部中介軟體 ( External middleware )
只要它有一個名為的公共方法,就可以從外部類執行中介軟體run()
<?php # application/controllers/TestController.php defined('BASEPATH') OR exit('No direct script access allowed'); use Vendor\CustomMiddleware; class TestController extends CI_Controller { public function __construct() { $this->middleware->run(new CustomMiddleware()); } }