本節教學將講解錯誤處理、設定檔的使用、單元測試以及部署到Apache伺服器。
1.錯誤處理
如果用戶訪問的URL不存在或伺服器存在錯誤時,我們不希望返貨一個錯誤的頁面,而想返回一個友好提示的頁面,在Laravel中可以很輕鬆地實現,Laravel有很簡單的錯誤和日誌處理,當伺服器端存在錯誤時,app/start/global.php
裡預設有一個處理所有異常的異常處理程序:
<code><span>App</span><span>::error(function(Exception</span> $<span>exception</span>) <span>{ <span><span>Log</span>:<span>:<span>error($exception)</span></span></span>; <span>}</span></span>);</code>
它會把異常訊息寫到日誌中,日誌檔案預設是app/storage/logs/laravel.log
。
如果要顯示一個友善的錯誤提示頁面,我們可以建立一個視圖:
<code><span>$ </span>php artisan <span>generate:</span>view error</code>
修改error.blade.php
:
<code><span>@extends</span>(<span>'_layouts.default'</span>) <span>@section</span>(<span>'main'</span>) Sorry, there <span>is</span> an error! <span>return</span> Index <span>@stop</span></code>
在App::error(function(Exception $exception)
<code><span>return</span> Response<span>::view</span>(<span>'error'</span>, <span>array</span>(), <span>500</span>);</code>
<code>$ php artisan generate:view <span>not</span><span>Found</span></code>
notFound.blade.php:
<code><span>@extends</span>(<span>'_layouts.default'</span>) <span>@section</span>(<span>'main'</span>) <span>Sorry</span>, the page you requested does <span>not</span> exist! <span>return</span><span>Index</span><span>@stop</span></code>
app/start/global.php中增加:
<code>App::missing(<span><span>function</span><span>(<span>$exception</span>)</span> {</span><span>return</span> Response::view(<span>'notFound'</span>, <span>array</span>(), <span>404</span>); });</code>
3.設定檔
有時候我們可能需要一些事先就設定好的值,程式執行的時候只需要引用這個值,例如分頁顯示時每頁顯示的數量,我們可以使用設定文件,在Laravel中使用設定檔也很方便,我們可以在app/config
下新建一個名為custom.php,在其中加入:
<code><span>return</span><span>array</span>( <span>'page_size'</span> => <span>10</span>, );</code>
現在你就可以在程式中使用了,把
paginate(10) 改成paginate(Config::get('custom.page_size')就行,其中
custom對應
app/config下的檔名,
page_size對應設定檔中的鍵名,對應設定檔中的鍵名,對應設定檔中的鍵名可以根據你是開發環境還是生產環境進行不同的配置,詳細的可以查看官方文檔。 。然後就可以寫測試程式碼了:
<code><span><span>class</span><span>MyTest</span><span>extends</span><span>TestCase</span> {</span><span>public</span><span><span>function</span><span>testIndex</span><span>()</span> {</span><span>$this</span>->call(<span>'GET'</span>, <span>'/'</span>); <span>$this</span>->assertResponseOk(); <span>$this</span>->assertViewHas(<span>'articles'</span>); <span>$this</span>->assertViewHas(<span>'tags'</span>); } <span>public</span><span><span>function</span><span>testNotFound</span><span>()</span> {</span><span>$this</span>->call(<span>'GET'</span>, <span>'test'</span>); <span>$this</span>->assertResponseStatus(<span>404</span>); } }</code>
測試程式碼寫完之後,我們需要安裝一個
phpunit元件,在composer.json
的require-dev中加入:
<code><span>"phpunit/phpunit"</span>: <span>"3.7.*"</span></code>
的
require-dev中加入:
,完成後執行vendor/bin/phpunit
,稍等一會就會出現測試結果,在我們測試的時候如果想要做一些初始化操作,例如資料庫遷移和填充等,可以定義在setUp方法中,切記要先執行parent::setUp
,測試完成之後如果想要恢復現場,可以在tearDown
方法中進行,如果在測試的時候想要使用特定的配置文件,我們可以在app/config /testing
目錄下創建,測試時它會自動覆蓋原來的配置。
5.部署至Apache測試通過後,我們可以把網站部署到應用程式伺服器了,在生產環境中,我們應該把
app/config/app.php
中的debug
設為false
。這裡講解怎麼部署到Apache伺服器。首先聲明我這裡的LAMP
環境是透過tasksel
安裝的,我們先安裝
:
<code>$ <span>sudo</span> a2enmod rewrite</code>
然後把/var/www
目錄的權限設為777,這個目錄是存放網站的目錄:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><code>$ sudo chmod -R <span>777</span> /<span>var</span><span>/www/</span></code></pre><div class="contentsignin">登入後複製</div></div>
然後把我們開發的專案資料夾複製到這個資料夾中,我這裡是blog
資料夾:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><code><span>$ </span>cd /var/www/
<span>$ </span>cp -r ~<span>/laravel-project/blog</span><span>/ .</span></code></pre><div class="contentsignin">登入後複製</div></div>
上面的開發專案路徑要跟你自己的一樣,之後我們需要把app/ storage
目錄的權限改為777,因為storage
文件夾中會存放日誌等,涉及到寫操作:
<code><span>$ </span>cd blog/app/ <span>$ </span>chmod -<span>R</span><span>777</span> storage/</code>
下面配置服務器:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><code>$ sudo vim /etc/apache2/sites-enabled/<span>000</span>-<span><span>default</span>.conf </span></code></pre><div class="contentsignin">登入後複製</div></div>
把
改成DocumentRoot /var/www/blog/public
,再修改
:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><code>$ <span>sudo</span> vim /etc/apache2/apache2.conf</code></pre><div class="contentsignin">登入後複製</div></div>
把<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false"><code>AllowOverride <span>all</span></code></pre><div class="contentsignin">登入後複製</div></div>
加到
<code>Options Indexes FollowSymLinks AllowOverride <span>None</span><span>Require</span><span>all</span> granted</code>
之後,現在啟動Apacheee
<code>$ <span>sudo</span> service apache2 start</code>
<code><span>$ </span>git clone <span>https:</span>/<span>/github.com/shiyanlou</span><span>/laravel-blog-6.git</span></code>
之後,現在啟動Apacheee
rrreee 127.0.0.1
就可以看到我們的網站了,至此部署就完成了。
6.小結本节教程讲了错误处理优化、配置文件的使用、单元测试以及怎么部署到Apache服务器,你可以买一个域名和一个服务器,最好买VPS云服务器,虚拟空间非常有局限性,然后把你自己写的网站部署到服务器让大家一起访问。
最后的代码下载:
<code><span>$ </span>git clone <span>https:</span>/<span>/github.com/shiyanlou</span><span>/laravel-blog-6.git</span></code>
本文详细出自http://www.shiyanlou.com/courses/123,转载请注明出处
以上就介绍了laravel大型项目系列教程(六)之优化、单元测试以及部署,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。