㈠ 為什麼 Laravel 會成為最成功最流行的 php 框架
Laravel是一個有著美好前景的年輕框架,它的社區充滿著活力,同時提供了完整而清晰的文檔,而且為快速、安全地開發現代應用提供了必要的功能。
2011年,Taylor Otwell首次將Laravel帶給這個世界,彼時,Laravel就是一個全新且現代的框架。Laravel基於MVC架構,可以滿足諸如事件處理、用戶身份驗證等各種需求,同時通過包管理實現模塊化和可擴展的代碼,並且對資料庫管理有著健壯的支持。
不管是專家還是新手,一旦接觸到Laravel,都會有相見恨晚之感——這正是你在為PHP項目尋找的框架。本文我們將討論為什麼Laravel會成為最成功最流行的PHP框架。
模塊化&可擴展性
Laravel是模塊化和可擴展的,你可以在包含超過5500個程序包的Packalyst中找到你想要添加的任何代碼。
微服務&API
Lumen是一個由Laravel衍生的專注於性能的微框架。使用Lumen提供的高性能API你可以更加簡單快速地開發微型項目。Lumen使用最小的配置集成了Laravel的所有重要特性,你可以通過將代碼復制到Laravel項目來實現框架的完整遷移。
<?php
$app->get('/', function() {
return view('lumen');
});
$app->post('framework/{id}', function($framework) {
$this->dispatch(new Energy($framework));
});
HTTP路由
Laravel擁有類似於Ruby on Rails的快速高效的路由系統。它可以讓用戶通過在瀏覽器上輸入路徑的方式讓應用程序的各部分相關聯。
Route::get('/', function () {
return 'Hello World';
});
HTTP中間件
Route::get('/', function () {
return 'Hello World';
});
Laravel可以通過中間件對應用進行保護——中間件會處理分析和過濾到達伺服器的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);
}
}
緩存
Laravel提供了健壯的緩存系統,使用緩存可以讓應用載入地更加快速,從而帶來更好的用戶體驗。
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...
}
集成Stripe
Laravel Cashier可以滿足你開發支付系統過程中所需要的任何需求。除此之外,它還同步並集成了用戶身份驗證系統。所以,你不再需要擔心如何將計費系統集成到開發中了。
$user = User::find(1);
$user->subscription('monthly')->create($creditCardToken);
任務自動化
Elixir是一個讓我們可以使用Gulp定義任務的Laravel API,我們可以使用Elixir定義預處理器來壓縮CSS 和JavaScript。
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) {
//
}
事件處理
Laravel應用中對事件的定義、記錄和監聽都非常便捷。服務提供者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]);
}
}
對象關系映射(ORM)
Laravel包含了一個資料庫處理層,其中的對象關系映射被稱作Eloquent。另外這個對象關系映射也適用於PostgreSQL。
$users = User::where('votes', '>', 100)->take(10)->get();
foreach ($users as $user) {
var_mp($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');
}
}
待辦事項清單(Queue)
Laravel提供了在後台使用待辦事項清單(to do list)處理復雜、漫長流程的選擇,好吧,其實就是隊列,隊列可以讓我們非同步處理某些流程而不需要用戶在載入頁面時長時間的等待。
Queue::push ( new SendEmail ( $ message ));