Slim Framework 版本 2.3.0
Slim Framework 在版本 2.3.0 中包含許多新而有用的功能,它與先前版本相容。在更新官方文件時,以下是協助您開始使用 Slim 新功能的一些提示。
路由群組
現在可以將路由分組。這可讓您在個別路由定義中避免複製路由 URL 前綴(例如「/api/users」)。
/**
* API route group
*/
$app->group('/api', function () use ($app) {
/**
* User route group
*/
$app->group('/users', function () use ($app) {
/**
* New user --> GET /api/users/new
*/
$app->get('/new', function () use ($app) {
$app->render('new_user.html');
});
});
/**
* Role route group
*/
$app->group('/roles', function () use ($app) {
/**
* New role --> GET /api/roles/new
*/
$app->get('/new', function () use ($app) {
$app->render('new_role.html');
});
});
});
資源定位器
Slim 現在提供資源定位器。這可讓您輕鬆將物件插入 Slim 應用程式或快速修改 Slim 應用程式的內部組成(例如要求物件)。
您可以使用資源定位器將任何資源插入 Slim 應用程式中。
// Set value
$app->foo = 'bar';
// Get value
$value = $app->foo;
You can also inject a resource as a closure that will be invoked whenever the given resource is requested.
// Set value
$app->now = function () {
return time();
};
// Get value
$now = $app->now;
如果您將資源插入為閉包,則在每次提出資源要求時,都將呼叫該資源。如果您需要僅計算該資源一次,然後每次提出要求時保持不變(即單例),則需要這樣做
// Set singleton value
$app->container->singleton('db', function () {
return new PDO('sqlite:database.db');
});
// Get singleton value
$pdo = $app->db;
Slim 的許多內部物件(例如環境、要求、回應、檢視、記錄)都是使用上面示範的單例方法插入。您可以輕鬆覆寫 Slim 任何這些物件的預設實作。
$app = new \Slim\Slim();
// Override Slim's default Response object
$app->container->singleton('response', function () {
return new \My\Response();
});
Slim 現在將使用您自訂的 \My\Response 類別作為其內部回應物件。Slim 目前沒有編寫其內部物件預期的介面;如果您打算覆寫 Slim 的任何內部物件,建議您使用子類別擴充內部物件。下一個版本將編寫 Slim 的介面預期,讓您在覆寫 Slim 的預設內部物件時更具彈性。
存取器
因為 Slim 使用資源定位器,現在可以將內部應用程式物件(例如要求和回應)直接存取為 Slim 應用程式執行個體的公用屬性。先前您仰賴存取器方法,例如 request() 和 response()。您現在只需要這樣做
$app = new \Slim\Slim();
$app->get('/', function () use ($app) {
// Get environment
$env = $app->environment;
// Get request
$req = $app->request;
// Get response
$res = $app->response;
// Get view
$view = $app->view;
// Get log
$log = $app->log;
});
設定介面
版本 2.3.0 包含新的 \Slim\Helper\Set 介面。此介面簡化且標準化您與 Slim 應用程式集合(例如要求和回應物件上的 cookie 和標頭)互動的方式。介面會是
set($key, mixed $value);
get($key, mixed $defaultValue = null);
replace(array $items);
all();
keys();
has($key);
remove($key);
clear();
count();
\Slim\Helper\Set 類別也實作 ArrayAccess、Countable 和 IteratorAggregate 介面。
標頭
要求和回應物件都包含公用標頭屬性。此屬性是 \Slim\Helper\Set 的執行個體。此介面可讓您輕鬆擷取要求物件的標頭,如下所示
$headers = $app->request->headers->all();
$header = $app->request->headers->get('Content-Type');
您也可以如同這樣,輕鬆處理回應物件的標頭
$app->response->headers->set('X-Foo', 'Bar');
Cookie
要求和回應物件都包含公用 cookie 屬性。此屬性是 \Slim\Helper\Set 的執行個體。此介面可讓您輕鬆擷取要求物件的 cookie,如下所示
$cookies = $app->request->cookies->all();
$cookie = $app->request->cookies->get('foo');
您可以像這樣輕鬆地以 Response 物件操控 cookie
$app->response->cookies->set('foo', 'bar');
在 Response 物件設定 cookie 時,您也可以傳遞陣列作為 cookie 值,以定義其他 cookie 參數
$app->response->cookies->set('foo', array(
'value' => 'bar',
'domain' => 'example.com',
'path' => '/',
'expires' => time() + 3600,
'secure' => true,
'httponly' => true
));
由於 Slim 現在使用 \Slim\Helper\Set 介面管理 Response cookie,因此 cookie 值並不會在 Slim 應用程式生命週期的最後才序列化和加密。這表示即使最初已設定 cookie,您仍可以使用新的 \Slim\Helper\Set 介面繼續操控 cookie 值。
請注意,此新介面僅適用於 Response 物件實作。您仍然可以使用 \Slim\Slim::setCookie()
和 \Slim\Slim::getCookie()
方法,就像以前一樣。
Slim Extras
目前的 Slim-Extras 儲存庫正在進行重大變更。我們會將第一方自訂程式簡化為僅限 Twig 和 Smarty。其他第三方程式將被捨棄。
我們還會將 Slim-Extras 儲存庫重新組織成更明確的儲存庫。自訂程式將會放在 Slim-Views 儲存庫中。Twig 和 Smarty 自訂程式都已收到重大(可能有問題)的變更。請務必閱讀其各自的 README 檔案,以取得最新資訊。
我們也會在 Slim Framework 網站上建立一個新區段,以協助您探索並找出第三方 Slim Framework 外掛程式(例如,中介軟體、程式及記錄器)。這個新功能即將推出。請持續關注最新資訊。
完整變更日誌
- 新增路由群組
- 新增資源定位器
- 新增 HTTP PATCH 方法支援
- 新增 \Slim\Helper\Set 介面
- 修正
\Slim\Slim::urlFor
方法中的 XSS 漏洞 - 簡化預設錯誤處理程式
\Slim\Slim::handleErrors
- 在非偵錯模式下,移除 \Slim\Middleware\PrettyExceptions
- 讓 HTTP 標頭保留 HTTP 前綴,如果有的話
- 新增 \Slim\Helper\Set 介面至 \Slim\Http\Headers 和 \Slim\Http\Cookies
- 更新 \Slim\Slim,讓環境、要求、回應、路由器、日誌和程式成為公用屬性。
- 更新 \Slim\Http\Request 和 \Slim\Http\Response,讓標頭和 cookie 為實作 \Slim\Helper\Set 的公用屬性。
- 新增 \Slim\Http\Response 方法
setStatus()
、getStatus()
、setBody()
、getBody()
和getLength()
- 更新 \Slim\Http\Response 物件,讓其 cookie 和標頭在應用程式生命週期的最後才序列化和加密。
- 以 PSR-3 介面更新 \Slim\Log
- 將
\Slim\Log::warn()
停用,改以\Slim\Log::warning()
取代 - 將
\Slim\Log::fatal()
停用,改以\Slim\Log::critical()
取代 - 將 \Slim\Http\Request 方法
cookies()
和headers()
停用 - 已棄用的 \Slim\Http\Response 方法
標頭()
、標頭()
、長度()
、主體()
、狀態()
- 已棄用的 \Slim\Http\Response 介面 ArrayAccess、Countable 和 IteratorAggregate