初识laravel5
来源: 阅读:678 次 日期:2015-03-04 10:26:03
温馨提示: 小编为您整理了“初识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 目录里合情合理。

路由

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

代码如下:

Route::controllers([

'auth' => 'Auth\AuthController',

'password' => 'Auth\PasswordController',

]);

可以在 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 App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;

use Illuminate\Contracts\Auth\Guard;

use Illuminate\Contracts\Auth\Registrar;

use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

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 \Illuminate\Contracts\Auth\Guard $auth

* @param \Illuminate\Contracts\Auth\Registrar $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 App\Services;

use App\User;

use Validator;

use Illuminate\Contracts\Auth\Registrar as RegistrarContract;

class Registrar implements RegistrarContract {

/**

* Get a validator for an incoming registration request.

*

* @param array $data

* @return \Illuminate\Contracts\Validation\Validator

*/

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 App\Models;即可,只是使用上比以前麻烦一些,需要先use,不过这样也使得项目结构更加清晰,一切类库都在命名空间的组织之下。

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

更多信息请查看IT技术专栏

更多信息请查看网络编程
手机网站地址:初识laravel5
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map