初識(shí)laravel5
來(lái)源:易賢網(wǎng) 閱讀:732 次 日期:2015-03-04 10:26:03
溫馨提示:易賢網(wǎng)小編為您整理了“初識(shí)laravel5”,方便廣大網(wǎng)友查閱!

laravel5發(fā)布了,目前國(guó)內(nèi)相關(guān)資料還比較少,只能先翻墻去官網(wǎng)先看看了,初步總結(jié)了一些變化,就想寫下來(lái)。

目錄結(jié)構(gòu)變化

laravel5最先強(qiáng)調(diào)的是項(xiàng)目目錄結(jié)構(gòu)的變化,與4.2區(qū)別還是蠻大的,逐條來(lái)說(shuō)吧。

新的目錄結(jié)構(gòu)看上去像這樣:

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的目錄結(jié)構(gòu):

app

commands

config

controllers

database

lang

models

start

storage

tests

views

bootstrap

public

對(duì)比一下,改變還是比較大的,可以看到 config,database被移動(dòng)到根目錄,lang,views目錄被移動(dòng)到resources目錄下,controllers被整合到http目錄里,models目錄不見了,還有一些新增的目錄就略了。

App命名空間

laravel5里還有一個(gè)變化,那就是app目錄默認(rèn)加上了一個(gè)根命名空間 App ,在 App 下的所有目錄、類都應(yīng)當(dāng)在該命名空間下,簡(jiǎn)而言之就是采用了psr4標(biāo)準(zhǔn)。

HTTP

laravel5認(rèn)為,新的目錄結(jié)構(gòu)是目前最好的結(jié)構(gòu)之一,可以讓我們的開發(fā)更加得心應(yīng)手,比如http目錄:

Http

Controllers

Middleware

Requests

Kernel.php

routes.php

Middleware 很陌生,其實(shí)它是原來(lái)的路由filter的一個(gè)升級(jí)版,現(xiàn)在不用在filters.php里定義過(guò)濾器,取而代之的是在 Middleware 目錄中創(chuàng)建類,并在Kernel.php中配置全局還是可選,全局的Middleware在每個(gè)請(qǐng)求都會(huì)執(zhí)行,而可選的就相當(dāng)于原來(lái)的filter,可以在路由中使用,也可以在控制器中使用。

Requests是對(duì)核心類Request的擴(kuò)展,你可以擴(kuò)展不同的Requests類,添加不同的功能。

可以認(rèn)為,所有關(guān)于http請(qǐng)求有關(guān)的處理都在http目錄中,比如控制器就是用來(lái)接受一個(gè)請(qǐng)求并返回的,所以將它放在 Http 目錄里合情合理。

路由

路由跟以前的區(qū)別不大,但是需要注意的當(dāng)我們指定控制器命名空間時(shí),命名空間不是絕對(duì)路徑,而是相對(duì)于 App\Http\Controllers,舉例:

代碼如下:

Route::controllers([

'auth' => 'Auth\AuthController',

'password' => 'Auth\PasswordController',

]);

可以在 App/Http/Controllers/Auth 目錄下找到對(duì)應(yīng)的類。

此外,路由還支持緩存,以提升性能,通過(guò)命令行工具

代碼如下:

php artisan route:cache

即可輕松生成,也可以通過(guò)

代碼如下:

php artisan route:clear

清理緩存。

Services

我們看到在App目錄下還有一個(gè)Services目錄,我覺(jué)得這是一個(gè)很贊的理念,一直以來(lái),我都對(duì)于控制器中出現(xiàn)大段的業(yè)務(wù)邏輯代碼而煩躁,我很想用一個(gè)單獨(dú)的層把這些業(yè)務(wù)邏輯封裝起來(lái),而services就可以用來(lái)干這個(gè)活,當(dāng)然,它不是必須的,但我強(qiáng)烈建議使用。就以laravel5自帶的demo來(lái)看看吧:

代碼如下:

# 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']);

}

}

這是一個(gè)登陸授權(quán)的控制器,我們看 __construct構(gòu)造函數(shù),利用參數(shù)自動(dòng)注入了一個(gè) "接口實(shí)現(xiàn)(參考手冊(cè)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']),

]);

}

}

提交用戶名密碼時(shí)的處理:

代碼如下:

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());

}

可以看到,表單驗(yàn)證的業(yè)務(wù)邏輯僅僅一行:

代碼如下:

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

整個(gè)控制器的代碼顯得干凈易讀,我們可以把很多通用的業(yè)務(wù)邏輯封裝成service,比不倫不類地直接封裝在控制器類好。

模型

models目錄不見了,因?yàn)椴皇撬袘?yīng)用都需要用到數(shù)據(jù)庫(kù)的,所以laravel5默認(rèn)不提供該目錄可以理解,而且由于提供了 App 這個(gè)namespace,所以我們可以自己在 App/ 下創(chuàng)建 Models 目錄,其中所有模型類都聲名namespace App\Models;即可,只是使用上比以前麻煩一些,需要先use,不過(guò)這樣也使得項(xiàng)目結(jié)構(gòu)更加清晰,一切類庫(kù)都在命名空間的組織之下。

時(shí)間有限,先寫這么多吧。希望大家能夠喜歡。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:初識(shí)laravel5
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)