工欲善其事,必先利其器。柚子意圖研讀slim框架,若沒有乙個好的slim應用,也會顯得無從下手。所以,研讀第一步是——造一款slim應用。
在我們即將要建立的slim應用中,用到了:
twig模板引擎
monolog日誌管理元件
eloquent資料庫orm元件
這些都是柚子做專案時經常用到的元件,隨著框架研讀的進度,我們還會不斷增加新的元件。
為方便參考,柚子會具現構建
puhaoran/
slimskeleton專案的所有步驟。如果你意圖快速建立乙個應用程式樣板,那可是來對地方啦!
此教程貫穿構建示例應用程式的全流程。如果您不想一步步來,可以直接在 github 上瀏覽它的源**。
git clone
[email protected]:puhaoran/slimskeleton.git
開始為你的專案建立乙個資料夾(我的專案叫做yo.slim.cn,你可以取乙個你喜愛的名字哦)。我喜歡為不在**的東西保留最高端別,然後為源**提供乙個資料夾。所以我的初始結構如下所示:
專案完成後的目錄結構:
composer是安裝slim framework的最佳方式。如果你還沒有,可以按照安裝說明安裝。在我的專案中,進入scr目錄,執行如下命令進行安裝:
composer require slim/slim
要正確設定git,請建立乙個名為src/.gitignore的檔案,並將以下單行新增到檔案中:
vendor/*
現在,git不會提示你將vendor /中的檔案新增到儲存庫中——我們不想這樣做的原因是:我們讓composer管理這些依賴項,而不是將它們包含在我們的源**控制庫中。
cd yo.slim.cn/src目錄,執行 composer require slim/slim
對於專案主頁上的slim framework,index.php有乙個很好的例子,所以我們將以此為出發點。把下面的**放到src/public/index.php中:
});我們只是貼上了一些**,讓我們來看看它的功能。指令碼頂部的使用語句只是將request和response類引入我們的指令碼,所以我們不必通過冗長的名字來引用它們。 slim框架支援psr-7,這是http訊息傳遞的php標準,所以在構建應用程式時,您會注意到request和response物件是您經常看到的東西。這是編寫web應用程式的一種現代而優秀的方法。
composer require monolog/monolog將依賴項命名為logger,新增它的**如下所示:
$container['logger'] = function($c) ;
我們正在向容器中新增乙個元素,它本身就是乙個匿名函式(傳入的$c是容器本身,所以如果需要的話可以訪問其他依賴項)。
使用logger,我可以在我的路由**中使用這樣一行:
擁有良好的應用程式日誌記錄對於任何應用程式都是非常重要的,這樣可以根據需要新增盡可能多的或盡可能少的除錯資訊,並且通過在每條訊息中使用適當的日誌級別,可以盡可能多地或盡可能少地細化適合您在任何時刻所做的事情。
ps:柚子執行過程中曾出現這樣乙個錯誤,根據錯誤提示可進行修復:
warning: date_default_timezone_get(): it is not safe to rely on the system's timezone settings.
這是由於我使用的是php7,不再支援date_default_timezone_get(),所以爆出了這樣一條警告,我根據提示進入logger.php,並修改了源**。
// static::$timezone = new \datetimezone(date_default_timezone_get() ?: 'utc』);
static::$timezone = new \datetimezone('utc');
您可以使用資料庫orm(如eloquent)將slimphp應用程式連線到資料庫。
composer require illuminate/database "~5.1"
將資料庫設定新增到slim的設定陣列。
<?php
return [
'settings' => [
'displayerrordetails' => true,
'db' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'database',
'username' => 'user',
'password' => 'password',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',]],
];
你新增到服務工廠:
// service factory for the orm
$container['db'] = function ($container) ;
// 日誌功能測試
$this->logger->addinfo("發生了一件有趣的事,並把它記錄了下來");
// 資料庫orm物件測試
$users = $this->db->table('users')->get();
return "hello world";
});
slim沒有像傳統mvc框架那樣的檢視層。 相反,slim的「檢視」是http響應。 每個slim應用程式路徑負責準備並返回乙個適當的psr 7響應物件。
// 在容器中註冊twig模板引擎元件
$container['view'] = function ($c) ;
這就是說,slim專案提供了twig-view和php-view元件來幫助您將模板呈現給psr7 response物件。
現在,您可以在應用程式路徑中使用slim/twig-view元件服務來呈現模板,並將其寫入psr 7 response物件,如下所示:
// 在路由中渲染twig模板
request $request, response $response, $args) )->setname('myname');
在templates/index.htm中渲染
my name is }
真不容易啊~現在我們也算完成一套現代php框架的全構建流程啦!目前該框架可支援依賴注入,psr7、monolog日誌、eloquent orm、twig模板引擎。在後續的文章中,我們會基於該框架進行深入原始碼的講解。 Slim研讀筆記七亂入篇之Monolog(上)
最近兩天,我的同事小濤濤因開發需要,急需乙個日誌系統來記錄日誌。所以,從這節開始我們講解monolog,深入理解下monolog的使用方式與實現原理。在開始研讀之前,我們需要理清二個概念異常和錯誤。異常是exception類的物件,在遇到無法修復的狀況時丟擲 例如,遠端 api 無響應,資料庫查詢失...
Slim研讀筆記七亂入篇之Monolog(補)
monolog是最為廣泛的php日誌庫,它有幾十個處理程式可記錄日誌到不同的程式中。柚子前段時間也曾寫過一篇關於monolog研讀博文,分析了monolog最重要兩個類中的關鍵 這節,介紹一些實用性的東東,譬如 如何用monolog開發elk可以使用的日誌。logstash是乙個開源的日誌管理工具,...
Slim研讀筆記八之路由(下)
跟隨上節的腳步繼續研讀 上節檢視到了slim router類的map方法。這節讓我們根據乙個請求的執行過程具體學習下這個路由的核心類。增加乙個路由 字首父組 if this routegroups 將請求方法變為大寫 according to rfc methods are defined in u...