Laravel 是一個有着美好前景的年輕框架,它的社區充滿着活力,相關的文檔和教程完整而清晰,併爲快速、安全地開發現代應用程序提供了必要的功能。在近幾年對PHP 框架流行度的統計中,Laravel始終遙遙領先。那麼是什麼讓Laravel成爲最成功的PHP框架?php
2011 年,Taylor Otwell將Laravel做爲一種包含全新現代方法的框架介紹給你們。Laravel最初的設計是爲了面向MVC架構的,它能夠知足如事件處理、用戶 身份驗證等各類需求。另外它還有一個由管理數據庫強力支持,用於管理模塊化和可擴展性代碼的軟件包管理器。Laravel以其簡潔、優雅的特性贏得了你們 的普遍關注,不管是專家仍是新手,在開發PHP項目的時候,都會第一時間的想到Laravel。本文咱們將討論爲何Laravel會成爲最成功的PHP 框架。laravel
Laravel注重代碼的模塊化和可擴展性。你能夠在包含超過5500個程序包的Packalyst目錄中找到你想要添加的任何文件。Laravel的目標是讓你可以找到任何想要的文件。算法
Lumen是一個由laravel衍生的專一於精簡的微框架。它高性能的程序接口可以讓你更加簡單快速的開發微型項目。Lumen使用最小的配置集成了全部laravel的重要特性,你能夠經過將代碼複製到laravel項目的方式將完整的框架遷移過來。數據庫
<?php
$app
->get(
'/'
,
function
() {
return
view(
'lumen'
);
});
$app
->post(
'framework/{id}'
,
function
(
$framework
) {
$this
->dispatch(
new
Energy(
$framework
));
});
|
Laravel擁有相似於Ruby on Rails的,快速、高效的路由系統。它可讓用戶經過在瀏覽器上輸入路徑的方式讓應用程序的各部分相關聯。瀏覽器
Route::get(
'/'
,
function
() {
return
'Hello World'
;
});
|
應用程序可受到中間件的保護——中間件會處理分析和過濾服務器上的HTTP請求。你能夠安裝中間件,用於驗證註冊用戶,並避免如跨站腳本(XSS)或其它的安全情況的問題。緩存
<?php
namespace
App/Http/Middleware;
use
Closure;
class
OldMiddleware {
public
function
handle(
$request
, Closure
$next
) {
if
(
$request
->input(
'age'
) <= 200) {
return
redirect(
'home'
);
}
return
$next
(
$request
);
}
}
|
你的應用程序可獲得一個健壯的緩存系統,經過對其進行調整,可讓應用程序的加載更加快速,這能夠給你的用戶提供最好的使用體驗。安全
Cache::extend(
'mongo'
,
function
(
$app
) {
return
Cache::repository(
new
MongoStore);
});
|
安全是相當重要的。Laravel自帶對本地用戶的身份驗證,並可使用「remember」 選項來記住用戶。它還可讓你例如一些額外參數,例如顯示是否爲活躍的用戶。服務器
if
(Auth::attempt([
'email'
=>
$email
,
'password'
=>
$password
,
'active'
=> 1 ],
$remember
)) {
// The user is being remembered...
}
|
Laravel Cashier能夠知足你要開發支付系統所須要的一切需求。除此以外,它還同步並集成了用戶身份驗證系統。因此,你再也不須要擔憂如何將計費系統集成到開發當中了。架構
$user
= User::find(1);
$user
->subscription(
'monthly'
)->create(
$creditCardToken
);
|
Elixir是一個可以讓咱們使用Gulp定義任務的Laravel程序接口,咱們可使用Elixir定義可精簡CSS 和JavaScript的預處理器。app
elixir(
function
(mix) {
mix.browserify(
'main.js'
);
});
|
一個安全的應用程序應該作到可把數據進行加密。使用Laravel,能夠啓用OpenSSL安全加密算法AES-256-CBC來知足你全部的需求。另外,全部的加密值都是由檢測加密信息是否被改變的驗證碼所簽署的。
use
Illuminate/Contracts/Encryption/DecryptException;
try
{
$decrypted
= Crypt::decrypt(
$encryptedValue
);
}
catch
(DecryptException
$e
) {
//
}
|
應用程序中事件的定義、記錄和聆聽都很是迅速。EventServiceProvider事件中的listen包含記錄在你應用程序上全部事件的列表。
protected
$listen
= [
'App/Events/PodcastWasPurchased'
=> [
'App/Listeners/EmailPurchaseConfirmation'
,
],
];
|
在Laravel中分頁是很是容易的由於它可以根據用戶的瀏覽器當前頁面生成一系列連接。
<?php
namespace
App/Http/Controllers;
use
DB;
use
App/Http/Controllers/Controller;
class
UserController
extends
Controller {
public
function
index() {
$users
= DB::table(
'users'
)->paginate(15);
return
view(
'user.index'
, [
'users'
=>
$users
]);
}
}
|
Laravel包含一個處理數據庫的層,它的對象關係化映射被稱爲Eloquent。另外這個也適用於PostgreSQL。
$users
= User::where(
'votes'
,
'>'
, 100)->take(10)->get();
foreach
(
$users
as
$user
) {
var_dump(
$user
->name);
}
|
單元測試的開發是一個耗費大量時間的任務,可是它倒是保證咱們的應用程序保持正常工做的關鍵。Laravel中可以使用PHPUnit執行單元測試。
<php
use
Illuminate/Foundation/Testing/WithoutMiddleware;
use
Illuminate/Foundation/Testing/DatabaseTransactions;
class
ExampleTest
extends
TestCase {
public
function
testBasicExample() {
$this
->visit(
'/'
)->see(
'Laravel 5'
)->dontSee(
'Rails'
);
}
}
|
Laravel提供在後臺使用待辦事項清單(to do list)處理複雜、漫長流程的選擇。它可讓咱們異步處理某些流程而不須要用戶的持續導航。
Queue :: push (
new
SendEmail ( $ message ));