初識laravel5
目錄結(jié)構(gòu)變化
laravel5最先強(qiáng)調(diào)的是項目目錄結(jié)構(gòu)的變化,與4.2區(qū)別還是蠻大的,逐條來說吧。
新的目錄結(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
對比一下,改變還是比較大的,可以看到 config,database被移動到根目錄,lang,views目錄被移動到resources目錄下,controllers被整合到http目錄里,models目錄不見了,還有一些新增的目錄就略了。
App命名空間
laravel5里還有一個變化,那就是app目錄默認(rèn)加上了一個根命名空間 App ,在 App 下的所有目錄、類都應(yīng)當(dāng)在該命名空間下,簡而言之就是采用了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 很陌生,其實它是原來的路由filter的一個升級版,現(xiàn)在不用在filters.php里定義過濾器,取而代之的是在 Middleware 目錄中創(chuàng)建類,并在Kernel.php中配置全局還是可選,全局的Middleware在每個請求都會執(zhí)行,而可選的就相當(dāng)于原來的filter,可以在路由中使用,也可以在控制器中使用。
Requests是對核心類Request的擴(kuò)展,你可以擴(kuò)展不同的Requests類,添加不同的功能。
可以認(rèn)為,所有關(guān)于http請求有關(guān)的處理都在http目錄中,比如控制器就是用來接受一個請求并返回的,所以將它放在 Http 目錄里合情合理。
路由
路由跟以前的區(qū)別不大,但是需要注意的當(dāng)我們指定控制器命名空間時,命名空間不是絕對路徑,而是相對于 App\Http\Controllers,舉例:
Route::controllers([
'auth' => 'Auth\AuthController',
'password' => 'Auth\PasswordController',
]);
可以在 App/Http/Controllers/Auth 目錄下找到對應(yīng)的類。
此外,路由還支持緩存,以提升性能,通過命令行工具
php artisan route:cache
即可輕松生成,也可以通過
php artisan route:clear
清理緩存。
Services
我們看到在App目錄下還有一個Services目錄,我覺得這是一個很贊的理念,一直以來,我都對于控制器中出現(xiàn)大段的業(yè)務(wù)邏輯代碼而煩躁,我很想用一個單獨的層把這些業(yè)務(wù)邏輯封裝起來,而services就可以用來干這個活,當(dāng)然,它不是必須的,但我強(qiáng)烈建議使用。就以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']);
}
}
這是一個登陸授權(quán)的控制器,我們看 __construct構(gòu)造函數(shù),利用參數(shù)自動注入了一個 "接口實現(xiàn)(參考手冊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());
}
可以看到,表單驗證的業(yè)務(wù)邏輯僅僅一行:
$validator = $this->registrar->validator($request->all());
整個控制器的代碼顯得干凈易讀,我們可以把很多通用的業(yè)務(wù)邏輯封裝成service,比不倫不類地直接封裝在控制器類好。
模型
models目錄不見了,因為不是所有應(yīng)用都需要用到數(shù)據(jù)庫的,所以laravel5默認(rèn)不提供該目錄可以理解,而且由于提供了 App 這個namespace,所以我們可以自己在 App/ 下創(chuàng)建 Models 目錄,其中所有模型類都聲名namespace App\Models;即可,只是使用上比以前麻煩一些,需要先use,不過這樣也使得項目結(jié)構(gòu)更加清晰,一切類庫都在命名空間的組織之下。
時間有限,先寫這么多吧。希望大家能夠喜歡。
- 淺析Laravel5中隊列的配置及使用
- Laravel5.1數(shù)據(jù)庫連接、創(chuàng)建數(shù)據(jù)庫、創(chuàng)建model及創(chuàng)建控制器的方法
- 修改Laravel5.3中的路由文件與路徑
- Laravel5中contracts詳解
- Laravel5.5中利用Passport實現(xiàn)Auth認(rèn)證的方法
- Laravel5權(quán)限管理方法詳解
- Laravel5中實現(xiàn)模糊匹配加多條件查詢功能的方法
- Laravel5中防止XSS跨站攻擊的方法
- laravel5 使用try catch的實例詳解
- 詳解Laravel5.6 Passport實現(xiàn)Api接口認(rèn)證
- Laravel5.7框架安裝與使用學(xué)習(xí)筆記圖文詳解
相關(guān)文章
laravel 配置路由 api和web定義的路由的區(qū)別詳解
今天小編就為大家分享一篇laravel 配置路由 api和web定義的路由的區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
PHP in_array()函數(shù)基本語法及嚴(yán)格比較使用實例
PHP是一種常用的服務(wù)器端腳本語言,提供了豐富的內(nèi)置函數(shù)來簡化開發(fā)過程,其中,in_array()函數(shù)是一種非常有用的函數(shù),用于判斷數(shù)組中是否存在指定的值,本文將詳細(xì)介紹in_array()函數(shù)的用法,并提供具體的代碼示例2024-01-01
zend optimizer在wamp的基礎(chǔ)上安裝圖文教程
在用wampserver集成開發(fā)環(huán)境下,有時會碰到一些開源程序需要zend optimizer的支持,下面我用的wamp的版本是2.0,optimizer的版本是ZendOptimizer-3.3.3-Windows-i3862013-10-10
php實現(xiàn)文本數(shù)據(jù)導(dǎo)入SQL SERVER
php將文本文件導(dǎo)入mysql我們經(jīng)常遇到,但是如果是導(dǎo)入到sqlserver又應(yīng)該如何操作呢,下面就給大家分享一下本人的操作方法,感覺效率還不錯,這里推薦給大家。2015-05-05
php項目中百度 UEditor 簡單安裝調(diào)試和調(diào)用
這篇文章主要介紹了php項目中百度 UEditor 簡單安裝調(diào)試和調(diào)用的相關(guān)資料,需要的朋友可以參考下2015-07-07

