ホームページ >バックエンド開発 >PHPチュートリアル >ThinkPHP、ZF2、Yaf、Laravel フレームワーク ルーティング コンペティション、thinkphplaravel_PHP チュートリアル
はじめに
ルーティング構成を紹介する 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:
<?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 のファンですが、他のフレームワークをハッキングするつもりはありません。興味がある場合は、この小さなサンプルを実装するために自分の使い慣れたフレームワークを使用できます。言語の制限はありません。
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。
この記事を友達と共有したり、コメントを残してください。皆様のご支援に心より感謝申し上げます。