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

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

Jul 13, 2016 am 10:00 AM
laravel thinkphp yaf ルーティング

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

出力:

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

/tp/user/jing

/tp/user/jing/blog

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravel と CodeIgniter の最新バージョンの比較 Laravel と CodeIgniter の最新バージョンの比較 Jun 05, 2024 pm 05:29 PM

Laravel 9 と CodeIgniter 4 の最新バージョンでは、更新された機能と改善が提供されます。 Laravel9はMVCアーキテクチャを採用しており、データベース移行、認証、テンプレートエンジンなどの機能を提供します。 CodeIgniter4 は、HMVC アーキテクチャを使用してルーティング、ORM、およびキャッシュを提供します。パフォーマンスの面では、Laravel9 のサービスプロバイダーベースの設計パターンと CodeIgniter4 の軽量フレームワークにより、優れたパフォーマンスが得られます。実際のアプリケーションでは、Laravel9 は柔軟性と強力な機能を必要とする複雑なプロジェクトに適しており、CodeIgniter4 は迅速な開発や小規模なアプリケーションに適しています。

Laravel と CodeIgniter のデータ処理機能はどのように比較されますか? Laravel と CodeIgniter のデータ処理機能はどのように比較されますか? Jun 01, 2024 pm 01:34 PM

Laravel と CodeIgniter のデータ処理機能を比較します。 ORM: Laravel はクラスとオブジェクトのリレーショナル マッピングを提供する EloquentORM を使用しますが、CodeIgniter は ActiveRecord を使用してデータベース モデルを PHP クラスのサブクラスとして表します。クエリビルダー: Laravel には柔軟なチェーンクエリ API がありますが、CodeIgniter のクエリビルダーはよりシンプルで配列ベースです。データ検証: Laravel はカスタム検証ルールをサポートする Validator クラスを提供しますが、CodeIgniter には組み込みの検証関数が少なく、カスタム ルールの手動コーディングが必要です。実践例:ユーザー登録例はLarを示しています

Laravel - アーティザンコマンド Laravel - アーティザンコマンド Aug 27, 2024 am 10:51 AM

Laravel - アーティザン コマンド - Laravel 5.7 には、新しいコマンドを処理およびテストするための新しい方法が付属しています。これには職人コマンドをテストする新しい機能が含まれており、そのデモについては以下で説明します。

Laravel と CodeIgniter ではどちらが初心者に優しいでしょうか? Laravel と CodeIgniter ではどちらが初心者に優しいでしょうか? Jun 05, 2024 pm 07:50 PM

初心者にとって、CodeIgniter は学習曲線が緩やかで機能は少ないですが、基本的なニーズはカバーしています。 Laravel は幅広い機能セットを提供しますが、学習曲線はわずかに急になります。パフォーマンスの点では、Laravel と CodeIgniter はどちらも良好なパフォーマンスを示します。 Laravel にはより広範なドキュメントとアクティブなコミュニティ サポートがあり、CodeIgniter はよりシンプルで軽量で、強力なセキュリティ機能を備えています。ブログアプリケーションを構築する実際のケースでは、Laravel の EloquentORM を使用するとデータ操作が簡素化されますが、CodeIgniter ではより手動の構成が必要になります。

Laravel と CodeIgniter: 大規模プロジェクトにはどちらのフレームワークが適していますか? Laravel と CodeIgniter: 大規模プロジェクトにはどちらのフレームワークが適していますか? Jun 04, 2024 am 09:09 AM

大規模プロジェクト用のフレームワークを選択する場合、Laravel と CodeIgniter にはそれぞれ独自の利点があります。 Laravel はエンタープライズレベルのアプリケーション向けに設計されており、モジュール設計、依存関係の注入、強力な機能セットを提供します。 CodeIgniter は、速度と使いやすさを重視した、小規模から中規模のプロジェクトに適した軽量フレームワークです。複雑な要件と多数のユーザーを伴う大規模なプロジェクトには、Laravel のパワーとスケーラビリティがより適しています。単純なプロジェクトやリソースが限られている状況では、CodeIgniter の軽量で迅速な開発機能がより理想的です。

Laravel と CodeIgniter: 小規模プロジェクトにはどちらのフレームワークが適していますか? Laravel と CodeIgniter: 小規模プロジェクトにはどちらのフレームワークが適していますか? Jun 04, 2024 pm 05:29 PM

小規模なプロジェクトの場合、Laravel は強力な機能とセキュリティを必要とする大規模なプロジェクトに適しています。 CodeIgniter は、軽量さと使いやすさを必要とする非常に小規模なプロジェクトに適しています。

Laravel と CodeIgniter ではどちらのテンプレート エンジンが優れていますか? Laravel と CodeIgniter ではどちらのテンプレート エンジンが優れていますか? Jun 03, 2024 am 11:30 AM

Laravel の Blade と CodeIgniter の Twig テンプレート エンジンを比較し、プロジェクトのニーズと個人的な好みに基づいて選択してください。Blade は MVC 構文に基づいており、適切なコード編成とテンプレートの継承を促進します。 Twig は、柔軟な構文、強力なフィルター、拡張サポート、セキュリティ サンドボックスを提供するサードパーティ ライブラリです。

Laravel - ページネーションのカスタマイズ Laravel - ページネーションのカスタマイズ Aug 27, 2024 am 10:51 AM

Laravel - ページネーションのカスタマイズ - Laravel には、ユーザーまたは開発者がページネーション機能を組み込むのに役立つページネーションの機能が含まれています。 Laravel ページネーターは、クエリ ビルダーおよび Eloquent ORM と統合されています。自動ページネーションメソッド

See all articles