laravel大型專案系列教學(六)之優化、單元測試以及部署

WBOY
發布: 2016-08-08 09:29:16
原創
1064 人瀏覽過

本節教學將講解錯誤處理、設定檔的使用、單元測試以及部署到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>
登入後複製
現在當訪問出現錯誤時,就會出現錯誤提示頁面:

2.404處理

當訪問的URL不存在時,我們也可以返回一個友好的提示頁面,先創建一個視圖:

<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>
登入後複製
現在當你訪問的URL不存在時就會出現下面這樣的頁面:

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安裝的,我們先安裝

mod_rewrite模組

<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">&lt;code&gt;$ sudo chmod -R &lt;span&gt;777&lt;/span&gt; /&lt;span&gt;var&lt;/span&gt;&lt;span&gt;/www/&lt;/span&gt;&lt;/code&gt;</pre><div class="contentsignin">登入後複製</div></div>然後把我們開發的專案資料夾複製到這個資料夾中,我這裡是blog資料夾:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;code&gt;&lt;span&gt;$ &lt;/span&gt;cd /var/www/ &lt;span&gt;$ &lt;/span&gt;cp -r ~&lt;span&gt;/laravel-project/blog&lt;/span&gt;&lt;span&gt;/ .&lt;/span&gt;&lt;/code&gt;</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">&lt;code&gt;$ sudo vim /etc/apache2/sites-enabled/&lt;span&gt;000&lt;/span&gt;-&lt;span&gt;&lt;span&gt;default&lt;/span&gt;.conf &lt;/span&gt;&lt;/code&gt;</pre><div class="contentsignin">登入後複製</div></div>

DocumentRoot/var/www/html

改成DocumentRoot /var/www/blog/public,再修改

apache2.conf

<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;code&gt;$ &lt;span&gt;sudo&lt;/span&gt; vim /etc/apache2/apache2.conf&lt;/code&gt;</pre><div class="contentsignin">登入後複製</div></div><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">&lt;code&gt;AllowOverride &lt;span&gt;all&lt;/span&gt;&lt;/code&gt;</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>
登入後複製
登入後複製
之後,現在啟動Apacheeerrreee 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教程有兴趣的朋友有所帮助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!