ホームページ > バックエンド開発 > PHPチュートリアル > ThinkPHP、ZF2、Yaf、Laravel フレームワーク ルーティング コンペティション、thinkphplaravel_PHP チュートリアル

ThinkPHP、ZF2、Yaf、Laravel フレームワーク ルーティング コンペティション、thinkphplaravel_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:00:28
オリジナル
790 人が閲覧しました

ThinkPHP、ZF2、Yaf、Laravel フレームワークルーティング競合、thinkphplaravel

はじめに

ルーティング構成を紹介する Zend Framework2 の技術記事「ZF2 Multi-level Tree Routing ルート構成例」を読みました。とても興味深いと思います。これが需要です:

/userはユーザー一覧ページに対応します
/user/:user_id はユーザーの個人ホームページに対応します。たとえば、/user/AlloVince は AlloVince ユーザーの個人ホームページに対応します
。 /user/:user_id/blog/ はユーザーのブログ リスト ページに対応します。たとえば、/user/AlloVince/blog には AlloVince によって書かれたブログがリストされます
/user/:user_id/blog/:blog_id はユーザーのブログ投稿に対応します
計画は原文から引用:

リーリー

この記事を読んだ後、このルーティング要件を実装するために使用した PHP フレームワークを使用する予定です。

PHP について考える

新しい ThinkPHP プロジェクトを作成します:

コードをコピーします コードは次のとおりです:
作曲家作成-プロジェクトtopthink/thinkphp tp --prefer-dist

コマンドラインには 3.2.2 がインストールされていることが表示されます

topthink/thinkphp (3.2.2) のインストール
ThinkPHP 公式 Web サイトの最新の安定バージョンは 3.2.3 です。

packagist の公式 Web サイトにアクセスして確認したところ、ライブラリの安定バージョンは確かに 3.2.2 であることがわかりました。

3.2.3を使用する必要があります。なぜ私はこれにそんなに夢中になっているのでしょうか?理由:

3.2のルーティング機能はモジュールに対して設定されているため、URL内のモジュール名をルーティングすることはできず、ルーティング定義は通常モジュール設定ファイルに記述されます。バージョン 3.2.3 では、グローバル ルート定義のサポートが追加され、プロジェクトのパブリック構成ファイルでルートを定義できるようになりました。
つまり、ルーティングを書き換える部分はControllerとActionの部分であり、Moodleはそのまま存在します。

home/user ではなく、/user が必要です。 (ThinkPHP のデフォルトのモジュールは Home、'DEFAULT_MODULE' => 'Home' ですが、これは変更可能です)

もちろん、この問題は .htaccess ファイルを変更することで解決することもできます。ただし、3.2.3 をインストールすることにしました。

ThinkPHP 公式 Web サイトから最新のパッケージをダウンロードし、解凍します。

ブラウザを使用してプロジェクトのエントリ ファイルにアクセスし、ThinkPHP にデフォルトのアプリケーション モジュール ホームを自動的に生成させます。

パブリック構成ファイル tpApplicationCommonConfconfig.php を変更します:

リーリー

ファイル tpApplicationHomeControllerUserController.class.php を作成します:

リーリー

ファイル tpApplicationHomeControllerBlogController.class.php を作成します:

リーリー

アクセス: http://127.0.0.1/tp/url

出力:

コードをコピーします コードは次のとおりです:
//m.sbmmt.com/tp/user

//m.sbmmt.com/tp/user/jing

//m.sbmmt.com/tp/user/jing/blog

//m.sbmmt.com/tp/user/jing/blog/1

上記の 4 つのリンクにアクセスし、順番に戻ってください:

私はユーザーリストです^_^
ようこそ、ジンさん
jingさんのブログ一覧です
jingさんのこのブログのIDは1です
以下の他のフレームワークでも上記の内容が出力されます。

Zend フレームワーク 2

ZF2 スケルトン プログラムを使用して ZF2 プロジェクトを作成します:

composer create-project --stability="dev" zendframework/skeleton-application zf2

デフォルトモジュールアプリケーションの設定ファイルzf2moduleApplicationconfigmodule.config.phpを変更します:

リーリー

このファイルには、ルーター部分とコントローラー部分を変更したばかりのスケルトン プログラムが付属しています。こんな長い文書を書くのは私には難しすぎるでしょう。 ZFがスケルトンプログラムを正式にリリースしたのもこれが理由だ。

ファイル zf2moduleApplicationsrcApplicationControllerUserController.php を作成します:

リーリー

ファイル zf2moduleApplicationsrcApplicationControllerBlogController.php を作成します:

リーリー

zf2 は Action パラメーターのバインドをサポートしません。ThinkPHP はバインドをサポートするだけでなく、変数名によるバインドと変数の順序によるバインドの 2 つのバインド方法もサポートします。

zf2 のアクションは、exit() を除いてビューを返す必要があります。表示を無効にする方法をご存知でしたら、教えてください。

ファイル zf2moduleApplicationviewapplicationuserurl.phtml を作成します:

リーリー

ファイル zf2moduleApplicationviewapplicationuserindex.phtml を作成します:

私はユーザーリストです^_^
ファイル zf2moduleApplicationviewapplicationusershow.phtml を作成します:

ようこそ、
ファイル zf2moduleApplicationviewapplicationblogindex.phtml を作成します:

のブログ一覧です。 ファイル zf2moduleApplicationviewapplicationblogshow.phtml を作成します:

コードをコピーします コードは次のとおりです: このブログの ID は

ヤフ

Yafをインストールする

コード生成ツールを使用して Yaf プロジェクトを作成する

スタートアップ ファイル yafapplicationBootstrap.php を変更し、_initRoute メソッドを変更します。

    $router = Yaf_Dispatcher::getInstance()->getRouter();
    $route0 = new Yaf_Route_Rewrite('url', array(
      'controller' => 'User',
      'action' => 'url',
        ), array()
    );
    $route1 = new Yaf_Route_Rewrite('user', array(
      'controller' => 'User',
      'action' => 'index',
        ), array()
    );
    $route2 = new Yaf_Route_Regex('#user/([a-zA-Z0-9_-]+)#', array(
      'controller' => 'User',
      'action' => 'show',
        ), array(1 => 'name',)
    );
    $route3 = new Yaf_Route_Regex('#user/([a-zA-Z0-9_-]+)/blog#', array(
      'controller' => 'Blog',
      'action' => 'index',
        ), array(1 => 'name',)
    );
    $route4 = new Yaf_Route_Regex('#user/([a-zA-Z0-9_-]+)/blog/([0-9]+)#', array(
      'controller' => 'Blog',
      'action' => 'show',
        ), array(1 => 'name', 2 => 'blogId',)
    );
    $router->addRoute('url', $route0);
    $router->addRoute('user_list', $route1);
    $router->addRoute('user', $route2);
    $router->addRoute("blog_list", $route3);
    $router->addRoute("blog", $route4);

ログイン後にコピー

Yaf有路由功能,但是没有根据路由名生成URL的方法。所以我定义了一个项目名,用于拼接URL。

在配置文件中添加配置项yaf\conf\application.ini:

复制代码 代码如下:
project.name = 'yaf'

创建文件yaf\application\controllers\User.php:

<&#63;php
class UserController extends Yaf_Controller_Abstract {
  public function urlAction() {
    $name = 'jing';
    $blogId = 1;
    $app = Yaf_Application::app();
    $projectName = $app->getConfig()->project->name;
    $urls = array(
      "/{$projectName}/user",
      "/{$projectName}/user/{$name}",
      "/{$projectName}/user/{$name}/blog",
      "/{$projectName}/user/{$name}/blog/{$blogId}",
    );
    foreach ($urls as $url) {
      echo "<a href=\"{$url}\">{$url}<a/><br />\n";
    }
    return false;
  }
  public function indexAction() {
    echo '我是用户列表^_^';
    // 禁用视图模板
    return false;
  }
  public function showAction($name) {
    echo "欢迎你,{$name}";
    return false;
  }
}

ログイン後にコピー

创建文件yaf\application\controllers\Blog.php:

复制代码 代码如下:
<?php
class BlogController extends Yaf_Controller_Abstract {
public function indexAction($name) {
echo "这是{$name}的博客列表";
return false;
}
public function showAction($blogId, $name) {
echo "{$name}的这篇博客的id为{$blogId}";
return false;
}
}

Yaf的Action支持参数绑定,是按变量名绑定的。$name、$blogId要和路由中配置的名称一样,而和参数顺序无关。

Laravel

新建Laravel项目:

复制代码 代码如下:
composer create-project laravel/laravel --prefer-dist

清除合并文件。在目录laravel\vendor\下有个文件compiled.php,这个文件是为了减少IO提高框架性能,将很多类文件合并到一个文件中而生存的。在开发环境下,应该删除该文件,否则修改了一些文件发现没有效果,其实是因为文件已经合并缓存了。
清除命令:

复制代码 代码如下:
php artisan clear-compiled

在生产环境中应该开启,以提升性能:

复制代码 代码如下:
php artisan optimize --force

修改路由文件laravel\app\Http\routes.php:

复制代码 代码如下:
<?php
Route::get('/url', array('uses' => 'UserController@getUrl'));
Route::get('/user', array('uses' => 'UserController@getIndex'));
Route::get('/user/{username}', array('uses' => 'UserController@getShow'));
Route::get('/user/{username}/blog', array(
    'as' => 'blog_list',
    'uses' => 'BlogController@getIndex',
));
Route::get('/user/{username}/blog/{blogId}', array(
    'as' => 'blog',
    'uses' => 'BlogController@getShow',
))->where(array('blogId' => '[0-9]+'));

查看路由定义情况:

复制代码 代码如下:
php artisan route:list

输出:

复制代码代码如下:
+----------+----------+---------------------- --+----------+------------------------------------- -----------+----------+
|ドメイン |方法 | URI |名前 |アクション |ミドルウェア |
+----------+----------+---------------------- --+----------+------------------------------------- -----------+----------+
|        |取得 | 頭 | URL |           | AppHttpControllersUserController@getUrl |            |
|        |取得 | 頭 |ユーザー |           | AppHttpControllersUserController@getIndex |            |
|        |取得 | 頭 |ユーザー/{ユーザー名} |           | AppHttpControllersUserController@getShow |            |
|        |取得 | 頭 |ユーザー/{ユーザー名}/ブログ |ブログリスト | AppHttpControllersBlogController@getIndex |            |
|        |取得 | 頭 |ユーザー/{ユーザー名}/ブログ/{ブログID} |ブログ | AppHttpControllersBlogController@getShow |            |
+----------+----------+---------------------- --+----------+------------------------------------- -----------+----------+

定义路由变量全局モード,修正文件laravelappProvidersRouteServiceProvider.php中のブートメソッド:

复制代码代码如下:
    public function boot(Router $router) {
        $router->pattern('ユーザー名', '[a-zA-Z0-9_-]+');

parent::boot($router);
    }

创建UserController制御器:

复制代码代码如下:
php 職人 make:controller UserController

Laravel帮私はlaravelappHttpControllers目录の下に文件UserController.phpを作成しました、文件の中から私が好んで一部骨フレームコードを書きました。修正文件laravelappHttpControllersUserController.php:

コードをコピーします コードは次のとおりです:
名前空間 AppHttpControllers;
AppHttpControllersController を使用します;
class UserController はコントローラーを拡張します {
パブリック関数 getUrl() {
$name = 'jing';
$blogId = 1;
$urls = array(
url('/user'),
action('UserController@getShow', array($name)),
ルート('ブログリスト', 配列($name)),
Route('ブログ', array($name, $blogId)),
);
foreach ($urls を $url として) {
echo "
{$url}
n";
}
}
パブリック関数 getIndex() {
echo '私はユーザーリストです^_^';
}
パブリック関数 getShow($name) {
echo "ようこそ、{$name}";
}
}

BlogController コントローラーを作成します:

コードをコピーします コードは次のとおりです:
php 職人 make:controller BlogController

ファイル laravelappHttpControllersBlogController.php を変更します:

コードをコピーします コードは次のとおりです:
名前空間 AppHttpControllers;
AppHttpControllersController を使用します;
class BlogController extends Controller {
パブリック関数 getIndex($name) {
echo "これは {$name} のブログリストです";
}
パブリック関数 getShow($name, $blogId) {
echo "{$name} のブログの ID は {$blogId} です";
}
}

Laravel のアクションは、変数名に関係なく、変数の順序でバインドされるパラメーター バインディングもサポートしています。

追記

私は Laravel のファンですが、他のフレームワークをハッキングするつもりはありません。興味がある場合は、この小さなサンプルを実装するために自分の使い慣れたフレームワークを使用できます。言語の制限はありません。

以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。

この記事を友達と共有したり、コメントを残してください。皆様のご支援に心より感謝申し上げます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/973281.html技術記事 ThinkPHP、ZF2、Yaf、Laravel フレームワーク ルーティング コンペティション、thinkphplaravel はじめに Zend Framework2 の技術記事「ZF2 マルチレベル ツリー ルーティングのルート構成例」を読んだので紹介します...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート