国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

初識laravel5

2020-03-22 20:15:57
字體:
供稿:網(wǎng)友
目錄結(jié)構(gòu)變化laravel5最先強調(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
html' target='_blank'>public
package
resources
lang
views
storage
cache
logs
meta
sessions
views
work
tests4.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)。HTTPlaravel5認(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的擴展,你可以擴展不同的Requests類,添加不同的功能。可以認(rèn)為,所有關(guān)于http請求有關(guān)的處理都在http目錄中,比如控制器就是用來接受一個請求并返回的,所以將它放在 Http 目錄里合情合理。路由路由跟以前的區(qū)別不大,但是需要注意的當(dāng)我們指定控制器命名空間時,命名空間不是絕對路徑,而是相對于 App/Http/Controllers,舉例:復(fù)制代碼 代碼如下:
Route::controllers([
'auth' = 'Auth/AuthController',
'password' = 'Auth/PasswordController',
]);
可以在 App/Http/Controllers/Auth 目錄下找到對應(yīng)的類。此外,路由還支持緩存,以提升性能,通過命令行工具復(fù)制代碼 代碼如下:
php artisan route:cache
即可輕松生成,也可以通過復(fù)制代碼 代碼如下:
php artisan route:clear
清理緩存。Services我們看到在App目錄下還有一個Services目錄,我覺得這是一個很贊的理念,一直以來,我都對于控制器中出現(xiàn)大段的業(yè)務(wù)邏輯代碼而煩躁,我很想用一個單獨的層把這些業(yè)務(wù)邏輯封裝起來,而services就可以用來干這個活,當(dāng)然,它不是必須的,但我強烈建議使用。就以laravel5自帶的demo來看看吧:復(fù)制代碼 代碼如下:
# 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:復(fù)制代碼 代碼如下:
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']),
]);
}
}
提交用戶名密碼時的處理:復(fù)制代碼 代碼如下:
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ù)邏輯僅僅一行:復(fù)制代碼 代碼如下:
$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)更加清晰,一切類庫都在命名空間的組織之下。時間有限,先寫這么多吧。希望大家能夠喜歡。PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 桃园市| 宜宾县| 淮阳县| 庄河市| 康保县| 江西省| 邢台县| 达尔| 新昌县| 中西区| 六盘水市| 平泉县| 泊头市| 北川| 佛冈县| 吉首市| 常山县| 肃北| 邓州市| 镇赉县| 洪江市| 宁夏| 太仓市| 丰台区| 谷城县| 全椒县| 班玛县| 临海市| 射阳县| 龙岩市| 申扎县| 敖汉旗| 广平县| 阳曲县| 美姑县| 盐边县| 颍上县| 潮州市| 甘洛县| 夹江县| 婺源县|