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

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

WBOY
WBOYオリジナル
2016-07-13 10:00:28771ブラウズ

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

出力:

コードをコピーします コードは次のとおりです:
54ba39bc52219ecb8a4537a80f1a5eda/tp/user7d01d0a03a49fceb57d12197d8d196cbdf250b2156c434f3390392d09b1c9563
eed49860e4d56c59fdc254e4f2c745bf/tp/user/jing7d01d0a03a49fceb57d12197d8d196cbdf250b2156c434f3390392d09b1c9563
b28b89db006fcbbd43aafd7a36b9105c/tp/user/jing/blog7d01d0a03a49fceb57d12197d8d196cbdf250b2156c434f3390392d09b1c9563
d4ea52b5a43e813208d9186baca24743/tp/user/jing/blog/17d01d0a03a49fceb57d12197d8d196cbdf250b2156c434f3390392d09b1c9563

上記の 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 を作成します:

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

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

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

ヤフ

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:

复制代码 代码如下:
ff14fe30e7270f3ad30a9106c132d777 '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:

コードをコピーします コードは次のとおりです:
fd3ccc4b9c567986b83ce2e63ba95d54{$url}7d01d0a03a49fceb57d12197d8d196cbdf250b2156c434f3390392d09b1c9563n";
}
}
パブリック関数 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 マルチレベル ツリー ルーティングのルート構成例」を読んだので紹介します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。