ホームページ  >  記事  >  バックエンド開発  >  2016年版Laravelシリーズ入門チュートリアル(2) 【中国人に最適なLaravelチュートリアル】

2016年版Laravelシリーズ入門チュートリアル(2) 【中国人に最適なLaravelチュートリアル】

WBOY
WBOYオリジナル
2016-06-23 13:02:35969ブラウズ

このチュートリアルのサンプル コードは、https://github.com/johnlui/Learn-Laravel-5 にあります。

どこかで行き詰まった場合は、サンプル コードにアクセスするのが最も早い方法です。

この記事では、Laravel フレームワークの最も重要な部分であるルーティング システムを赤ちゃんと一緒に学びます。

Laravel 5.0 に基づいた古いチュートリアルを読んでいる場合は、その記事で書かれている Auth システムの構築が Laravel によって解決されていることがわかります。 Laravel 4 バージョンの以前のチュートリアルでは、赤ちゃんが Laravel の操作原理をより早く感じられるように、全員が自分で難しい認証システムを構築できるようにすることで、短期的な学習曲線の傾きを実際に改善しました。しかし残念ながら、現在の認証システムはいくつかのコマンドを実行することで有効化できるため、初心者はまだ混乱しています。この欠点を補うために、私は上半身裸になり、ルーティング システムを使用して、Laravel が Web サイトの動作を制御するために MVC アーキテクチャをどのように編成するかを直接示すことにしました。

ルーティングの最初の紹介

ルーティング システムは、すべての PHP フレームワークの中核であり、コード スニペットへの URL のマッピングを実行します。さまざまなフレームワークに接続されたルーティング システムは、フレームワークの本質をそのまま反映しています。 。 Laravel ルーティングの中国語ドキュメント: http://laravel-china.org/docs/5.1/routing

Laravel 5 以降、ルーティングは learnlaravel5/app/Http/routes.php に配置されました。まず現在のルーティングを見てみましょう。保存されたコードはわずか数行です:

Route::get('/', function () {    return view('welcome');});Route::auth();Route::get('/home', 'HomeController@index');

コードの中間行 Route::auth(); は、主に、認証システムによって挿入されるルーティング設定です。コードの最初の 3 行と最後の行です。

名前空間

私は、大幅なパフォーマンスの向上に加えて、Laravel 4 と比較した Laravel 5 の最大の改善点は、新しい名前空間の計画であると常に信じてきました。つまり、より明確で、より合理的で、初心者にとってより役立つものです。

Laravel 4 の単純さの失敗

Laravel 4 時代には、ルーティング、コントローラー、モデルなど、大量のコードがルート名前空間で実行されていました。これにより、退屈な use xxxx; 行を数行節約できるように見えますが、実際には、これは名前空間の誤用であり、名前空間を学習する初心者にとっては有害です。

絶対クラス名

Laravel 5 では、psr-4 名前空間標準が完全に導入されています。名前空間は、実際のファイルが配置されているフォルダー レベルと一致しており、フォルダーの最初の文字はファイルの合意された名前空間です。例: learnlaravel5/app/Http/Controllers/HomeController.php の絶対クラス名は AppHttpControllersHomeController、learnlaravel5/app/User.php の絶対クラス名は AppUser です。

「絶対クラス名」は私が独自に作成したものです。名前空間が有効になっているシステムでは、サブ名前空間の下のクラスにはグローバルに直接アクセスできる名前が付けられます。この名前はクラスの完全な名前空間です。 「実用的な」PHP 言語では名前空間が非常に奇妙に見えますが、それでも PHP であり、PHP の動作原理と哲学に従っています。同様に、Laravel がどれほど強力であっても、Laravel は PHP コードで書かれています。そのため、Laravel が必要な特定の機能を提供していないことに苦しんでいる場合でも、パニックにならず、不安にならずに、単にコードを記述してください。 PHPのやり方。

psr-4 の公式英語ドキュメントはこちらです: http://www.php-fig.org/psr/psr-4/

役立つ情報

名前空間については、実際には特に難しいことはありません。特に名前空間の秘密を明らかにする記事を書きました:

「PHP Namespace Answers

基本的なルーティング分析

クローズドルーティング

ルーティングファイルの最初の 3 行はクロージャルーティングです:

Route::get('/', function () {    return view('welcome');});

クロージャルーティングはクロージャを使用しますこれは、便利で柔軟な多くの単純な操作をクロージャで直接解決できます。たとえば、「サーバーの現在時刻を出力する」:

Route::get('now', function () {    return date("Y-m-d H:i:s");});

北京時間を取得したい場合は、learnlaravel5/config/app.php の 55 行目あたりでタイムゾーンを上海に設定してください:

'timezone' => 'Asia/Shanghai',

http:// にアクセスしてください。現時点での func.io: 1024/now は次の結果を取得できます:

Controller@method routing

クロージャー ルーティングは柔軟で強力ですが、ほとんどのシナリオでは MVC アーキテクチャに戻る必要があります:

Route::get('/home', 'HomeController@index');

ルーティング コードのこの行の意味は、誰でも想像できると思いますが、GET メソッドで http://fuck.io:1024/home にアクセスすると、HomeController コントローラーのインデックス メソッド (関数) が呼び出されます。同様に、Route::post('/home', 'HomeController@indexPost'); を使用して POST メソッド リクエストに応答することができます。

controller@method 呼び出しの原理の簡単な分析

Laravel のルーティングは、すべての PHP フレームワークのルーティングと同じです。これは、コントローラーでメソッドを呼び出す最も単純かつ直接的な PHP 方法を使用します。つまり、文字列初期化クラスを使用して取得します。オブジェクトの指定されたメソッドを呼び出し、結果を返します。以下に、Laravel ルーティング呼び出しプロセスを検出するためのいくつかの手順を簡単にリストします。興味がある場合は、自分で勉強してください。

laravel5/app/Providers/RouteServiceProvider.php を学ぶ

全局搜索 routes.php ,我们找到了这个文件。此文件最后的 mapWebRoutes 方法,给所有的路由同意加进了一个路由组,定义了一个命名空间和一个中间件:

protected function mapWebRoutes(Router $router){    $router->group([        'namespace' => $this->namespace, 'middleware' => 'web',    ], function ($router) {        require app_path('Http/routes.php');    });}

顺着这个函数往上看,你会发现命名空间定义的地方:

protected $namespace = 'App\Http\Controllers';

之后命名空间、类、方法是如何传递的呢?

learnlaravel5/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php

经过简单的追踪,我们找到了这个文件。让我们在 dispatch 方法中增加一行 var_dump($controller); ,刷新就可以看到页面上如下的输出:

这就是我们要调用的控制器类的“绝对类名”。

最后一步

Laravel 使用了完整的面向对象程序架构,对控制器的调用进行了超多层封装,所以最简单地探测方式其实是手动抛出错误,这样就可以看到完整的调用栈:

在 HomeController 的 index 方法里的 return 之前增加一行 throw new \Exception("我故意的", 1); ,刷新页面,你将看到以下画面:

我们可以看到,是 learnlaravel5/vendor/laravel/framework/src/Illuminate/Routing/Controller.php 第 80 行最终驱动起了 HomeController:

public function callAction($method, $parameters){    return call_user_func_array([$this, $method], $parameters);}

具体的细节不再详解,宝宝如果感兴趣的话,把这些方法一个一个地都看一遍吧,相信对于你理解 Laravel 运行原理很有帮助。其实 PHP 跟字符串结合的紧密程度已经紧逼 js 和 JSON 了。结尾分享一个小彩蛋: 这个laravel路由怎么写?

下一步: 2016 版 Laravel 系列入门教程(三)【最适合中国人的 Laravel 教程】

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。