文档章节

Laravel大型项目系列教程(六)之优化、单元测试及部署

实验楼
 实验楼
发布于 2015/02/27 16:08
字数 1320
阅读 103
收藏 0
点赞 0
评论 0

###本节教程将讲解错误处理、配置文件的使用、单元测试以及部署到Apache服务器。

###1.错误处理

如果用户访问的URL不存在或者服务器存在错误时,我们不希望返货一个错误的页面,而想返回一个友好提示的页面,在Laravel中可以很轻松地实现,Laravel有很简单的错误和日志处理,当服务器端存在错误时,app/start/global.php里默认有一个处理所有异常的异常处理程序:

<!-- lang: php -->
App::error(function(Exception $exception)
{
    Log::error($exception);
});

它会把异常信息写到日志中,日志文件默认是app/storage/logs/laravel.log

如果要显示一个友好的错误提示页面,我们可以创建一个视图:

<!-- lang: php -->
$ php artisan generate:view error

修改error.blade.php: <!-- lang: php -->

@extends('_layouts.default')

@section('main')
     Sorry, there is an error!
	return Index
@stop

App::error(function(Exception $exception)中增加: <!-- lang: php -->

  return Response::view('error', array(), 500);

现在当访问出现错误时,就会出现错误提示页面:

###2.404处理

当访问的URL不存在时,我们也可以返回一个友好的提示页面,先创建一个视图: <!-- lang: php -->

   $ php artisan generate:view notFound

修改notFound.blade.php: <!-- lang: php -->

@extends('_layouts.default')

@section('main')

Sorry, the page you requested does not exist!
	return Index

@stop

app/start/global.php中增加: <!-- lang: php -->

App::missing(function($exception)
{
return Response::view('notFound', array(), 404);
});

现在当你访问的URL不存在时就会出现下面这样的页面:

###3.配置文件

有时候我们可能需要一些事先就设定好的值,程序执行的时候只需要引用这个值,例如分页显示时每页显示的数量,我们可以使用配置文件,在Laravel中使用配置文件也很方便,我们可以在app/config下新建一个名为custom.php,在其中添加: <!-- lang: php -->

 return array(
'page_size' => 10,
 );

现在你就可以在程序中使用了,把paginate(10)改成paginate(Config::get('custom.page_size')就行,其中custom对应app/config下的文件名,page_size对应相应配置文件中的键名,配置文件也可以根据你是开发环境还是生产环境进行不同的配置,详细的可以查看官方文档。

###4.单元测试

在网站上线前,我们通常需要进行单元测试,Laravel提供了很方便的单元测试模块。我这里仅实现一个例子,我们可以先在app/tests下创建一个名为MyTest.php的文件,在里面定义一个名为MyTest的类,切记要继承TestCase类,然后就可以写测试代码了: <!-- lang: php -->

class MyTest extends TestCase {

public function testIndex()
{
	$this->call('GET', '/');
	$this->assertResponseOk();
	$this->assertViewHas('articles');
	$this->assertViewHas('tags');
}

public function testNotFound()
{
	$this->call('GET', 'test');
	$this->assertResponseStatus(404);
}
}

测试代码写完之后,我们需要安装一个phpunit组件,在composer.jsonrequire-dev中添加: <!-- lang: php -->

"phpunit/phpunit": "3.7.*"

然后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模块: <!-- lang: php -->

$ sudo a2enmod rewrite

然后把/var/www目录的权限设为777,这个目录是存放网站的目录: <!-- lang: php -->

$ sudo chmod -R 777 /var/www/

然后把我们开发的项目文件夹复制到这个文件夹中,我这里是blog文件夹: <!-- lang: php -->

$ cd /var/www/
$ cp -r ~/laravel-project/blog/ .

上面的开发项目路径要跟你自己的一样,之后我们需要把app/storage目录的权限改为777,因为storage文件夹中会存放日志等,涉及到写操作: <!-- lang: php -->

$ cd blog/app/
$ chmod -R 777 storage/

下面配置服务器: <!-- lang: php -->

$ sudo vim /etc/apache2/sites-enabled/000-default.conf 

DocumentRoot /var/www/html改成DocumentRoot /var/www/blog/public,再修改apache2.conf: <!-- lang: php -->

$ sudo vim /etc/apache2/apache2.conf

把 <!-- lang: php -->

AllowOverride all

加到 <!-- lang: php -->

Options Indexes FollowSymLinks
AllowOverride None
Require all granted

之后,现在启动Apache服务器: <!-- lang: php -->

$ sudo service apache2 start

在浏览器中访问localhost或者127.0.0.1就可以看到我们的网站了,至此部署就完成了。

###6.小结

本节教程讲了错误处理优化、配置文件的使用、单元测试以及怎么部署到Apache服务器,你可以买一个域名和一个服务器,最好买VPS云服务器,虚拟空间非常有局限性,然后把你自己写的网站部署到服务器让大家一起访问。

最后的代码下载: <!-- lang: php -->

$ git clone https://github.com/shiyanlou/laravel-blog-6.git

###本文详细出自http://www.shiyanlou.com/courses/123,转载请注明出处。

© 著作权归作者所有

共有 人打赏支持
实验楼
粉丝 30
博文 31
码字总数 60531
作品 0
成都
Laravel大型项目系列教程

Laravel大型项目系列教程(一) 一、简介 本教程将使用Laravel完成一个多用户的博客系统,大概会包含如下内容: - 路由管理。 - 用户管理,如用户注册、修改信息、锁定用户等。 - 文章管理,...

实验楼 ⋅ 2015/01/21 ⋅ 10

php&go&python&node

2016 第二届 PHP 全球开发者大会回顾(文末附演讲嘉宾所有资料下载) 继前年的 “PHP7 初探”、去年的“高性能的 PHP ” 主题后,2017 第三届 PHP 全球开发者大会的活动主题是“高可用的 PH...

掘金官方 ⋅ 2017/12/20 ⋅ 0

AngularJS 系列教程 :PhoneCat 应用教程

PhoneCat 教程 本教程将构建一个 Angular 应用。 这款应用可以显示 Android 设备列表,你可以筛选你感兴趣的设备,并查看任意设备详情。 Angular 让浏览器更智能,而不依赖于任何本地插件: ...

chengsu ⋅ 2016/12/13 ⋅ 0

ASP.NET 5系列教程(七)完结篇-解读代码

在本文中,我们将一起查看TodoController 类代码。 [Route] 属性定义了Controller的URL 模板: 所有符合该模板类型的HTTP 请求都会被路由到该controller。在本例中, 路由的命名规范为对应C...

葡萄城控件技术团队 ⋅ 2015/03/17 ⋅ 0

PHP 开发者的 Docker 之旅

用 PHP 作为我们「Docker 开发大礼包」开篇是带着一些朝圣的心情的。这是一门堪称「古老」的语言,这也是一门争议最多的语言,这更是一门不断涅槃的语言。「PHP 是最好的语言」这个流传已久的...

DaoCloud ⋅ 2015/07/23 ⋅ 1

Lumen 5.1 发布,微型 PHP 框架

Lumen 5.1 已经发布并可用了 。此版本的特性包括:基于最近发布的laravel 5.1部分组成,遵循PSR-2,以及各种错误修复和改进。基于包含的Laravel5.1组件,也意味着Lumen支持事件广播,模型工厂...

raykwok ⋅ 2015/06/17 ⋅ 8

CI Weekly #5 | 微服务架构下的持续部署与交付

CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成、持续交付,持续部署、自动化测试、 DevOps 等实践教程、工具与资源,以及一些工程师文化相关的程序员 Ti...

风起云飞fir_im ⋅ 2016/12/06 ⋅ 0

Komodo IDE 11发布!有取代Eclipse的可能吗?

  【IT168 评论】Active State发布了最新版本的跨平台Komodo IDE及其免费的开源对应Komodo EDIT。Komodo IDE 11已经具有智能响应自动完成功能和符号浏览器,可提高整体性能。Komodo IDE是于...

it168网站 ⋅ 2017/09/27 ⋅ 0

Laravel 不权威导航

Laravel不权威导航 Hi 这里是Roy整理的Laravel相关索引,希望能帮到大家 ,目前只是一小部分,正在努力整理中... Laravel 文档 Laravel 官方文档 —— 英文 Laravel 中文文档 —— laravel-...

weixingo ⋅ 2016/02/05 ⋅ 0

slim framework and github pages

composer require slim/slim:^3.0 新建slim文件夹再执行以上命令,在此之前当然得安装好comper。(推荐:COMPOSER設計原理與基本用法 用git bash或者cmd都可以,新建个index.php cmd: echo...

phala ⋅ 2015/12/30 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 1

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 昨天 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 昨天 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 昨天 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 昨天 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部