摘要:使用時,必須為每個路由定義接受的謂詞,并且任何與這些參數不匹配的請求都將生成錯誤。使用,可以使用匿名函數作為控制器,甚至可以在不使用單個控制器的情況下構建完整的應用程序。通過使用您告訴的方法,該路由將在請求下可用。
路由 ( Routes ) 內容 ( Contents )
介紹 Introduction
路由類型 Route types
句法 Syntax
命名空間 Namespaces
前綴 Prefixes
命名路線 Named routes
回調為路線 Callbacks as routes
組 Groups
資源路線 Resource routes
默認控制器 Default controller
參數 Parameters
可選參數 Optional parameters
參數正則表達式 Parameter regex
“粘性”參數 "Sticky" parameters
介紹 ( Introduction )Luthier CI更改CodeIgniter路由的行為:
在CodeIgniter中,默認情況下,可以在任何HTTP謂詞下訪問路由。使用Luthier CI時,必須為每個路由定義接受的HTTP謂詞,并且任何與這些參數不匹配的請求都將生成404錯誤。
在CodeIgniter中,可以直接從URL訪問控制器,而無需定義路由。另一方面,使用Luthier CI,嘗試訪問未定義的路徑(即使URL與控制器的名稱和方法匹配)也會生成404錯誤。
在CodeIgniter中,路由參數是指向控制器的簡單正則表達式,在Luthier CI中,路由是一個獨立且唯一的實體,它包含定義明確的參數以及從中構建URL的能力。
在CodeIgniter中,您只能創建指向控制器的路由。使用Luthier CI,可以使用匿名函數作為控制器,甚至可以在不使用單個控制器的情況下構建完整的Web應用程序。
路由類型 ( Route types )您可以使用三種類型的路由:
HTTP routes: 它們在HTTP請求下訪問,并在application/routes/web.php文件中定義
AJAX routes: 它們僅在AJAX請求下訪問,并在application/routes/api.php文件中定義
CLI routes: 它們僅在CLI(命令行界面)環境下訪問,并在application/routes/cli.php文件中定義
AJAX路由進入api.php
雖然你可以在 web.php 文件中定義AJAX路由,但最好這樣做 api.php
如果您使用相同的URL和相同的HTTP動詞定義兩條或更多路線,則第一條路線將被返回ALWAYS
Luthier CI允許您使用動詞GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS和TRACE定義HTTP路由:
如果您使用過Laravel,那么您將知道如何使用Luthier CI,因為它的語法是相同的。這是路線最簡單的例子:
Route::get("foo", "bar@baz");
第一條路由是獲勝的路由
其中foo是路徑的URL,bar @ baz是它所指向的控制器和方法(由@分隔)的名稱。通過使用get()您告訴Luthier CI 的方法,該路由將在GET請求下可用。
Luthier CI允許您使用動詞GET,POST,PUT,PATCH,DELETE,HEAD,OPTIONS和TRACE定義HTTP路由:
Route::post("foo", "bar@baz"); Route::put("foo", "bar@baz"); Route::patch("foo", "bar@baz"); Route::delete("foo", "bar@baz"); Route::head("foo", "bar@baz"); Route::options("foo", "bar@baz"); Route::trace("foo", "bar@baz");
此外,您可以將具有路徑屬性的數組作為第三個參數傳遞(稍后解釋)。
Route::get("test", "controller@method", ["prefix" => "...", "namespace" => "...", (...)] );
要在路由中接受多個HTTP謂詞,請使用以下match()方法:
Route::match(["GET", "POST"], "path", "controller@method", [ (...) ]);命名空間 ( Namespaces )
namespace屬性告訴CodeIgniter控制器所在的子目錄。(注意,這不是PHP名稱空間,它是目錄名稱)
// The controller is located in application/controllers/admin/Testcontroller.php Route::get("hello/world", "testcontroller@index", ["namespace" => "admin"]);前綴 ( Prefixes )
使用該prefix屬性為路由添加前綴:
// The URL will be "admin/hello/world" instead of "hello/world" Route::get("hello/world", "testcontroller@index", ["prefix" => "admin"]);命名路由 ( Named routes )
您可以(事實上,這是可取的)為您的路線指定一個名稱。這將允許您從其他地方調用它們:
Route::get("company/about_us", "testcontroller@index")->name("about_us");
要通過它的名稱獲取路由,請使用該route()函數,其第一個參數是路由的名稱,第二個可選參數是具有該路由的參數值的數組。例如,要獲取上一個路由,只需寫route("about_us"):
// http://example.com/company/about_us ">My link!
重復的名稱 ( Duplicated names )
您不能使用相同的名稱調用兩個或多個路由
組 ( Groups )您可以使用該group()方法創建路由組,其中第一個參數是它們共有的前綴,第二個參數是具有子路由的匿名函數:
Route::group("prefix", function(){ Route::get("bar","test@bar"); Route::get("baz","test@baz"); });
此外,可以為路由組分配共同的屬性。這是擴展語法的示例:
Route::group("prefix", ["namespace" => "foo", "middleware" => ["Admin","IPFilter"]], function(){ Route::get("bar","test@bar"); Route::get("baz","test@baz"); });資源路由 ( Resource routes )
資源路由允許您在單行上為控制器定義CRUD操作(Create, Read, Update, Delete) 例:
Route::resource("photos","PhotosController");
生產:
[Name] [Path] [Verb] [Controller action] photos.index photos GET PhotosController@index photos.create photos/create GET PhotosController@create photos.store photos POST PhotosController@store photos.show photos/{id} GET PhotosController@show photos.edit photos/{id}/edit GET PhotosController@edit photos.update photos/{id} PUT, PATCH PhotosController@update photos.destroy photos/{id} DELETE PhotosController@destroy
此外,可以創建部分資源路由,傳遞第三個參數,其中包含要過濾的操作數組:
Route::resource("photos","PhotosController", ["index","edit","update"]);
生產:
[Name] [Path] [Verb] [Controller action] photos.index photos GET PhotosController@index photos.edit photos/{id}/edit GET PhotosController@edit photos.update photos/{id} PUT, PATCH PhotosController@update默認控制器 ( Default controller )
Luthier CI自動設置使用URL / 和HTTP謂詞 GET 定義的任何路由作為默認控制器,但是您可以使用 set() 方法和這種特殊語法顯式設置它:
// Note that the value is binded to the special "default_controller" route of CodeIgniter and you must // use the native syntax: Route::set("default_controller", "welcome/index");回調為路線 ( Callbacks as routes )
您可以使用匿名函數(也稱為閉包或lambda函數)而不是指向控制器,例如:
Route::get("foo", function(){ ci()->load->view("some_view"); });
要訪問匿名函數中的框架實例,請使用該ci()函數。
參數 ( Parameters )可以在路線中定義參數,以便它們可以是動態的。要將參數添加到路徑的某個段,請將其括起來{curly brackets}
Route::post("blog/{slug}", "blog@post");
重復參數 ( Duplicated parameters )
您不能使用相同名稱調用兩個或多個參數
可選參數 ( Optional parameters )要創建可選參數,請?在關閉大括號之前添加一個:
Route::put("categories/{primary?}/{secondary?}/{filter?}", "clients@list");
請注意,在定義第一個可選參數后,以下所有參數必須是可選的。
Routes generated automatically
生成的路由Luthier CI將為您生成所有可選參數的完整路徑樹,因此您不必擔心編寫除主要路徑之外的更多路徑。
參數正則表達式 ( Parameter regex )您可以將參數限制為正則表達式:
// These are the equivalents of (:num) and (:any), respectively: Route::get("cars/{num:id}/{any:registration}", "CarCatalog@index");
此外,您可以使用具有以下{([expr]):[name]}語法的自定義正則表達式:
// This is equivalent to /^(es|en)$/ Route::get("main/{((es|en)):_locale}/about", "about@index");“粘性”參數 ( "Sticky" parameters )
您可能需要在一組路由中定義一個參數,然后在所有子路由中都可以使用該參數,而不必在所有控制器中的所有方法的參數中定義它,這很繁瑣。考慮到這一點,Luthier CI提供了所謂的Sticky參數。粘性參數以下劃線(_) 開頭并具有一些奇點:
它不會傳遞給路徑指向的控制器方法的參數。
在共享粘合劑參數的所有子路徑中,將從URL中獲取值,并將在route()函數中自動提供,因此您可以省略它,或覆蓋任何其他值。
考慮這個例子:
Route::group("shop/{_locale}", function() { Route::get("category/{id}", "ShopCategory@categoryList")->name("shop.category"); Route::get("product/{id}/details", "ShopProduct@details")->name("shop.product.details"); });
路由shop.category并shop.product.details共享_locale粘性參數。雖然該參數必須位于URL中,但route()在此上下文中使用該函數時,并不強制它出現在參數值數組中。當您需要鏈接到當前路徑的其他變體時,這尤其有用:
// If the URL is "shop/en/category/1", {_locale} will be "en" here: echo route("shop.category", ["id" => 1]); # shop/en/category/1 echo route("shop.category", ["id" => 2]); # shop/en/category/2 echo route("shop.category", ["id" => 3]); # shop/en/category/3 // You can overwrite that value for any other: echo route("shop.category", ["_locale" => "es", "id" => 1]); # shop/es/category/1
粘性參數的一個優點是您不必將它們定義為指向控制器的所有方法的參數。在前面的示例中,在ShopCategory和ShopProduct控制器中,它們的方法將只有一個參數:$id,因為它是路由器提供的唯一參數:
要獲取sticky參數的值,請使用控制器中屬性的param()方法route:
route->param("_locale"); } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/31398.html
摘要:寫入權限確保該文件夾具有寫入權限,以便這些命令正常工作僅適用于開發出于安全原因,如果您的應用程序配置了或環境,則將禁用這些命令激活默認情況下禁用工具。 命令行 Command line 內容 Contents 介紹 Introduction 句法 Syntax 使用CLI路由 Using CLI routes 內置CLI工具 Built-in CLI tools 激活 Ac...
摘要:訪問控制列表的配置與訪問控制列表使用的類別和權限類別組的名稱和的關聯排列。 簡單的認證 SimpleAuth 內容 Contents 介紹 Introduction 安裝 Installation 第1步:復制所需的文件 Step 1: Copy the required files 第2步:安裝數據庫 Step 2: Install the database 第3步:定義...
摘要:歡迎關于是的一個插件,增加了有趣的功能,旨在簡化大型網站和的構建。它是為了盡可能地與框架集成,因此在安裝后,應用程序中已存在的所有內容應該繼續正常工作。在大多數情況下,安裝不會超過分鐘社區和支持要報告錯誤并提出更改,請訪問上的存儲庫 歡迎 關于Luthier CI Luthier CI是CodeIgniter的一個插件,增加了有趣的功能,旨在簡化大型網站和API的構建。 它是為了盡可能...
摘要:返回表示用戶的對象。相反,存儲使用單向加密算法生成的哈希。例刪除當前會話要從當前身份驗證會話中刪除所有數據包括當前存儲的經過身份驗證的用戶,請使用靜態方法用戶操作有兩種操作可用于對經過身份驗證的用戶執行角色驗證和權限驗證。檢查密碼重置請求。 Luthier CI 認證框架 ( Authentication Framework ) 內容 Contents 介紹 Introduct...
摘要:中間件執行點有兩個執行點此時定義的中間件將在控制器構造函數之后執行,但在執行任何控制器操作之前執行。控制器構造函數始終首先執行這是的行為,而不會對其進行修改。添加后綴避免沖突的一種方法是將后綴添加到中間件名稱。 中間件 Middleware 內容 Contents 介紹 Introduction 中間值執行點 Middleware execution points 創建中間件 C...
閱讀 868·2021-11-25 09:44
閱讀 1086·2021-11-19 09:40
閱讀 7114·2021-09-07 10:23
閱讀 1988·2019-08-28 17:51
閱讀 1117·2019-08-26 10:59
閱讀 1939·2019-08-26 10:25
閱讀 3149·2019-08-23 18:22
閱讀 873·2019-08-23 16:58