SlimPhp框架的使用(二)編寫介面

bearever發表於2017-09-20

原文連結
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,然後在輸入網址,總算可以了。

相關文章