原文連結
SlimPhp使用路由管理頁面的訪問,Slim本身並沒有MVC模式,但是我們可以通過Controller來實現MVC的效果,因為我們的目標是編寫介面,所以現在我們不考慮View層,只解決MC。
推薦檢視akrabat的簡單Slim專案理解Slim的執行邏輯Glihub地址:Slim-Bookshelf
檔案結構
專案的檔案目錄推薦如下:#表示一級目錄,##表示二級目錄
#app ----專案主要目錄
##HelloWordController.php ----測試用的controller
##dependencies.php ----新增需要使用的controller檔案
##routes.php ----定義路由
##setting.php ----設定的配置檔案
#public ----使用者可以訪問的目錄
##index.php ----index頁面
#vendor ----使用composer自動生成的目錄
##composer.json ----composer配置檔案
##composer.lock ----composer檔案不需要管複製程式碼
建立目錄
按照上面的目錄結構建立檔案的目錄app和public,vendor目錄使用composer命令自動生成,所以不需要我們建立。
安裝Slim
Slim的安裝可以看上一篇文章。
編輯composer.json
編輯composer.json
檔案,新增autoload
地址,然後執行終端執行composer update
{
"require": {
"slim/slim": "^3.0"
},
"autoload": {
"psr-4":{
"Sample\\":"app" //“Sample” 是自己定義的一個名稱空間,"app"對應的是檔案路徑
}
}
}複製程式碼
編輯Controller檔案
在app資料夾裡面建立HelloWordController.php
檔案,先把HelloWordController
程式碼貼上來
namespace Sample\Controllers; //名稱空間,很重要,引用檔案都需要使用這個路徑
use \interop\Container\ContainerInterface;
final class HelloWordController
{
protected $app;
public function __construct(ContainerInterface $ci)
{
$this->app = $ci;
}
/**
* 測試的方法
**/
public function say($request, $response, $params)
{
echo 'Welcome Slim';
}
}複製程式碼
編輯index.php檔案
在public資料夾裡面建立index.php
檔案,用來處理網路訪問
在public資料夾裡面建立index.php檔案,用來處理網路訪問
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
require '../vendor/autoload.php'; //自動載入的指令碼
$settings = require '../app/setting.php'; //引入設定的配置檔案
$app = new \Slim\App($settings);
require '../app/dependencies.php'; //引入controller配置檔案
require '../app/routes.php'; //引入路由管理檔案
$app->run(); //執行複製程式碼
編寫設定配置檔案
在app目錄下面建立setting.php
檔案,根據自己的需求編寫配置檔案
return [
'settings' => [
'addContentLengthHeader' => false,
'displayErrorDetails' => true //開啟錯誤提示
],
];複製程式碼
編寫Controller配置檔案
在app資料夾裡面建立dependencies.php
注意:所有的檔案需要使用名稱空間的路徑,如“Sample\Controllers\HelloWordController”
$container = $app->getContainer();
//hello
$container['Sample\Controllers\HelloWordController'] = function ($c) {
return new \Sample\Controllers\HelloWordController($c);
};複製程式碼
新增路由管理檔案
在app資料夾裡面建立routes.php
檔案
//處理域名/hello地址的訪問,跳轉到
HelloWordController
的say方法
$app->get('/hello','Sample\Controllers\HelloWordController:say');複製程式碼
完畢?
那麼現在我們訪問網址,是不是就會出現我們期待的東西呢?然而事實是不是的,提示controller not fund
。這是什麼bug??WTF,我們還需要執行一步,在終端輸入composer dump-autoload -o
,然後在輸入網址,總算可以了。