本节教程将讲解错误处理、配置文件的使用、单元测试以及部署到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
对应相应配置文件中的键名,配置文件也可以根据你是开发环境还是生产环境进行不同的配置,详细的可以查看官方文档。
4.单元测试
在网站上线前,我们通常需要进行单元测试,Laravel提供了很方便的单元测试模块。我这里仅实现一个例子,我们可以先在app/tests
下创建一个名为MyTest.php
的文件,在里面定义一个名为MyTest
的类,切记要继承TestCase
类,然后就可以写测试代码了:
<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>
然后composer update
安装,完成后执行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,这个目录是存放网站的目录:
<code>$ sudo chmod -R <span>777</span> /<span>var</span><span>/www/</span></code>
然后把我们开发的项目文件夹复制到这个文件夹中,我这里是blog
文件夹:
<code><span>$ </span>cd /var/www/ <span>$ </span>cp -r ~<span>/laravel-project/blog</span><span>/ .</span></code>
上面的开发项目路径要跟你自己的一样,之后我们需要把app/storage
目录的权限改为777,因为storage
文件夹中会存放日志等,涉及到写操作:
<code><span>$ </span>cd blog/app/ <span>$ </span>chmod -<span>R</span><span>777</span> storage/</code>
下面配置服务器:
<code>$ sudo vim /etc/apache2/sites-enabled/<span>000</span>-<span><span>default</span>.conf </span></code>
把DocumentRoot/var/www/html
改成DocumentRoot /var/www/blog/public
,再修改apache2.conf
:
<code>$ <span>sudo</span> vim /etc/apache2/apache2.conf</code>
把
<code>AllowOverride <span>all</span></code>
加到
<code>Options Indexes FollowSymLinks AllowOverride <span>None</span><span>Require</span><span>all</span> granted</code>
之后,现在启动Apache服务器:
<code>$ <span>sudo</span> service apache2 start</code>
在浏览器中访问localhost
或者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教程有兴趣的朋友有所帮助。