初识laravel5

 laravel5发布了,目前国内相关资料还比较少,只能先翻墙去官网先看看了,初步总结了一些变化,就想写下来。

 
 

目录结构变化

laravel5最先强调的是项目目录结构的变化,与4.2区别还是蛮大的,逐条来说吧。

新的目录结构看上去像这样:

app
Commands
Console
Events
Handlers
Commands
Events
Http
Controllers
Middleware
Requests
Kernel.php
routes.php
Providers
Services
bootstrap
config
database
migrations
seeds
public
package
resources
lang
views
storage
cache
logs
meta
sessions
views
work
tests

4.2的目录结构:

app
commands
config
controllers
database
lang
models
start
storage
tests
views
bootstrap
public
对比一下,改变还是比较大的,可以看到 config,database被移动到根目录,lang,views目录被移动到resources目录下,controllers被整合到http目录里,models目录不见了,还有一些新增的目录就略了。

App命名空间

laravel5里还有一个变化,那就是app目录默认加上了一个根命名空间 App ,在 App 下的所有目录、类都应当在该命名空间下,简而言之就是采用了psr4标准。

HTTP

laravel5认为,新的目录结构是目前最好的结构之一,可以让我们的开发更加得心应手,比如http目录:

Http
Controllers
Middleware
Requests
Kernel.php
routes.php
Middleware 很陌生,其实它是原来的路由filter的一个升级版,现在不用在filters.php里定义过滤器,取而代之的是在 Middleware 目录中创建类,并在Kernel.php中配置全局还是可选,全局的Middleware在每个请求都会执行,而可选的就相当于原来的filter,可以在路由中使用,也可以在控制器中使用。

Requests是对核心类Request的扩展,你可以扩展不同的Requests类,添加不同的功能。

可以认为,所有关于http请求有关的处理都在http目录中,比如控制器就是用来接受一个请求并返回的,所以将它放在 Http 目录里合情合理。

路由

路由跟以前的区别不大,但是需要注意的当我们指定控制器命名空间时,命名空间不是绝对路径,而是相对于 AppHttpControllers,举例:

 

代码如下:

Route::controllers([
'auth' => 'AuthAuthController',
'password' => 'AuthPasswordController',
]);

 

可以在 App/Http/Controllers/Auth 目录下找到对应的类。

此外,路由还支持缓存,以提升性能,通过命令行工具

 

代码如下:

php artisan route:cache

 

即可轻松生成,也可以通过

 

代码如下:

php artisan route:clear

 

清理缓存。

Services

我们看到在App目录下还有一个Services目录,我觉得这是一个很赞的理念,一直以来,我都对于控制器中出现大段的业务逻辑代码而烦躁,我很想用一个单独的层把这些业务逻辑封装起来,而services就可以用来干这个活,当然,它不是必须的,但我强烈建议使用。就以laravel5自带的demo来看看吧:

 

代码如下:

# Http/Controllers/Auth/AuthController.php
<?php namespace AppHttpControllersAuth;
use AppHttpControllersController;
use IlluminateContractsAuthGuard;
use IlluminateContractsAuthRegistrar;
use IlluminateFoundationAuthAuthenticatesAndRegistersUsers;
class AuthController extends Controller {
/*
|--------------------------------------------------------------------------
| Registration & Login Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users, as well as the
| authentication of existing users. By default, this controller uses
| a simple trait to add these behaviors. Why don't you explore it?
|
*/
use AuthenticatesAndRegistersUsers;
/**
* Create a new authentication controller instance.
*
* @param IlluminateContractsAuthGuard $auth
* @param IlluminateContractsAuthRegistrar $registrar
* @return void
*/
public function __construct(Guard $auth, Registrar $registrar)
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
}
}

 

这是一个登陆授权的控制器,我们看 __construct构造函数,利用参数自动注入了一个 "接口实现(参考手册IoC)" 的绑定,我们看下Registrar:

 

代码如下:

<?php namespace AppServices;
use AppUser;
use Validator;
use IlluminateContractsAuthRegistrar as RegistrarContract;
class Registrar implements RegistrarContract {
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return IlluminateContractsValidationValidator
*/
public function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
public function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}

 

提交用户名密码时的处理:

 

代码如下:

public function postRegister(Request $request)
{
$validator = $this->registrar->validator($request->all());
if ($validator->fails())
{
$this->throwValidationException(
$request, $validator
);
}
$this->auth->login($this->registrar->create($request->all()));
return redirect($this->redirectPath());
}

 

可以看到,表单验证的业务逻辑仅仅一行:

 

代码如下:

$validator = $this->registrar->validator($request->all());

 

整个控制器的代码显得干净易读,我们可以把很多通用的业务逻辑封装成service,比不伦不类地直接封装在控制器类好。

模型

models目录不见了,因为不是所有应用都需要用到数据库的,所以laravel5默认不提供该目录可以理解,而且由于提供了 App 这个namespace,所以我们可以自己在 App/ 下创建 Models 目录,其中所有模型类都声名namespace AppModels;即可,只是使用上比以前麻烦一些,需要先use,不过这样也使得项目结构更加清晰,一切类库都在命名空间的组织之下。

时间有限,先写这么多吧。希望大家能够喜欢。

时间: 2024-11-01 06:25:49

初识laravel5的相关文章

初识数据仓库(Data Warehousing)-“掀起你的盖头来”

数据 初识数据仓库(Data Warehousing)-"掀起你的盖头来"我在这里就说说我初学的一些认识和看法,希望这些能够作为一些简单的介绍给那些初学的朋友们,更希望起到抛砖引玉的效果.    说到数据仓库,我们了解一下他产生的背景.自从DBASEⅢ(dBase是dos年代发展过来得数据库管理程序,先归属于Borland旗下)的兴起,数据库的应用进入了个人计算机,使得中小企业也纷纷进入商业性的数据库应用阶段.这时的数据库应用主要是进行数据的记录,我们称这类为OLTP(线上事务处理)数

Flash AS 3.0入门教程:初识AS 3.0

初识AS3.0 学习AS3.0已有一段时间了,想把自已对AS3的一些认识和大家分享一下.主要想说说AS3与AS2的不同之处,没有什么逻辑性,想到什么就写点什么,因此,它不适合AS高手们阅读.本文将力求用最直白的语言,尽量不用那些艰涩难懂的名词和术语. 一.在什么地方写代码 失望,以为要说点啥,原来是这么小儿科的问题.没办法,我说过了,本文不适合AS高手阅读的.为了更好地理解,我们还是用例子来说明.现在,就让我们一起来回顾一下,在AS2中我们都会把代码写在什么地方.我们在AS2中建一新文档,新建一

一起学WINS系列(一)初识、基础

<一起学WINS>系列是新出的一个系列专题,旨在用通俗的语言和精细的实例向大家介绍windows2003 服务之一,WINS服务.尽管现在server 2008比较火,且很受欢迎,但这些基础的东西还是不能忘的,希 望大家通过本系列的讨论和学习,对WINS有一些更多的认识和理解.不过,事先声明,本系列并非WINS的 帮助文件,不可能面面俱到,过于常规的知识点可能会很少提及,本文出发点是从实用角度来学习和理解 WINS. 此系列第一节:初识.基础. WINS是什么?从字面理解就是Windows I

Laravel5中contracts详解

 在Laravel5中出现了一个新的东西,叫做contracts,那么它到底是什么?有什么用?怎么用?我们就来探讨下吧.     我们先来看看官方文档中对contracts的定义: Laravel's Contracts are a set of interfaces that define the core services provided by the framework. 意思是说Laravel的Contracts是一个由 框架提供 的定义了 核心服务接口 的集合. 也就是说,每一个Co

初识Android的ReactiveX

初识Android的ReactiveX 开发一个复杂一点的Android应用都会用到网络请求,交互和动画.这些都意味着 要写很多的回调嵌套.这样的代码也被称为callback hell(回调地狱).这样的 代码不仅长,很难理解,而且也是错误高发的地方.ReactiveX 提供了一个清晰.准确处理异步问题和事件的方法. RxJava是一个ReactiveX在JVM上的实现,由NetFlix开发.这个库在Java开发者中 广为流传.这个教程中你会学到如何在Android应用开发中使用RxJava.这

[译]安卓界面导航初识

本文讲的是[译]安卓界面导航初识, 原文地址:A Primer on Android navigation 原文作者:Liam Spradlin 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m- 译者:horizon13th 校对者:SumiMakito, laiyun90 安卓界面导航初识 界面中任何引领用户跳转于页面之间的媒介 -- 这便是导航 当你的应用中的两个不同页面产生联系时,导航便由此而生.跳转链接(不论从哪跳到哪)便是页面间传递用户的媒介.创建导

初识树莓派(转)

  初识树莓派   大数据时代,随着智能手机.手环等产品的出现,也逐渐对智能硬件产生了兴趣.今天开始研究树莓派,哈哈. 树莓派是什么 树莓派是全球最小最便宜的个人计算机Raspberry Pi的中文译名,只有信用卡大小,是由英国的Raspberry Pi基金会开发的.最初的设计目的是以超低的硬件价格及开放的自由软件来为发展中国家的学生提供一个基本的计算机编程环境.但是随着树莓派计算机的推出,它已经成为了众多计算机爱好者的新工具,通过树莓派这种超低成本的迷你计算机,可以完成许多以前无法完成的事情,

TypeScript快餐教程 (1) - 初识

TypeScript快餐教程 (1) - 初识 JavaScript,更广泛点也许可以说是ECMA Script的各种实现,从诞生到现在,一直就没断过争议.ECMA Script 4的夭折正是这些争论严重程度的重要体现. Anyway,不断争议如何,JavaScript的地位一直不曾被撼动.针对JavaScript存在的问题,可编译成JavaScript的语言一直就前仆后继. 这其中,DART,CoffeeScript和TypeScript是其中最有名的三个. DART由Google推出,设计者

【Laravel】Laravel5遇到的问题以及解决方案

LARAVEL5.1创建应用流程 本次采用composer进行安装,参考地址如下 http://stackoverflow.com/questions/28893710/whoops-looks-like-something-went-wrong-laravel-5-0 总结如下 确定你的项目文件夹 storage 和 bootstrap/cache 的写入权限 把项目中的 .env.example 文件复制一份命名为 .env 作为配置文件,会被读取 在项目根文件夹执行 php artisan