Yii 2.0に何を期待するか

Jennifer Aniston
Jennifer Anistonオリジナル
2025-02-19 13:02:10630ブラウズ

Yii 2.0に何を期待するか

YII 2.0は昨年4月にベータにリリースされ、2014年半ばに最初の安定したリリースの目標が設定されました。GitHub発行リストには300のオープンな問題があり、2913が閉じています。 。 2.0RCマイルストーンへの進捗は99%でした。私の推測では、チームは近いですが、おそらくもう少し待つ必要があります。私たち全員が待っている間、すでに入手可能な例を見て、私たちが期待できることを見てみましょう。

キーテイクアウト

    YII 2.0は、名前空間、特性、作曲家統合の使用を含む大幅な改善と変更を導入し、最新のPHPフレームワーク機能を強化します。
  • フレームワークは、Blueprint CSSフレームワークからTwitter Bootstrapに移行しました。これは、美学を変えるだけでなく、迅速なアプリケーション開発のための広範なUIコンポーネントも提供します。
  • YII 2.0でのエラー処理がオーバーホールされ、すべてのエラーを例外に変換し、より有益な出力を提供し、デバッグプロセスを改善します。 YIIのコード生成ツールであるGIIは、YII 2.0に不可欠なままであり、現在、CRUD運用と国際化のためのコード生成の改善をサポートしています。
  • YII 2.0では、PHP 5.4以上が必要であり、高度なPHP機能を利用しています。これは、古いサーバー環境との互換性に影響を与える可能性がありますが、最終的にはより堅牢で安全なフレームワークを提供します。
  • 歴史のごく一部
  • Yiiの最初のバージョンは、2008年にリリースされた後、非常に速く人気がありました。創業者のQiang Xueは以前はPradoフレームワークに取り組んでおり、それからYiiを構築するために経験とフィードバックを使用しました。
  • yiiは、他のフレームワーク、言語、ライブラリの多くのアイデアを使用しています。プラド、ルビー、jQuery、シンフニ​​ー、Joomlaはすべて、インスピレーションの源として認められています。
  • Yii 2.0の最初のコミットは2011年にさかのぼりますが、昨年開発が回復しました。チームは、最先端の新世代PHPフレームワークになることを目的として書き直しました。作曲家、PSR、名前空間、特性など、最新のテクノロジーと機能を採用しています。
  • 言及する価値のあることは、ダウンロードページYIIバージョン1.1サポートが2015年12月31日に終了するため、移行を考え始める時間があるということです。
要件

名前空間と特性の使用は、要件をPHP 5.4に引き上げました。さらに、開発を開始するには、MB_STRING、PDO、およびINTL拡張機能が必要になります。これは、独自のサーバーを実行する場合は問題になりませんが、共有環境にいる場合はそうかもしれません。もちろん、やがてその問題は消えます

インストール

yiiは、作曲家からインストール可能になりました。このインストール方法をすぐに説明します

現在、利用可能な2つのアプリケーションの例があります。数ページ、連絡先ページ、ログインページを含む基本的な例があります。高度な例では、別のフロントエンドとバックエンド、データベースインタラクション、サインアップ、パスワードの回復を追加します。

始めましょう

基本的な例から始めます。 Yiiを以前に見たことがある場合は、Yii 1.1が付属しているのと同じ基本

WebAppを認識します。次のコマンドを使用して、作曲家に基本的な例をインストールします。

http://localhost/yii2-app-basic/requirements.phpを開くことで、サーバーが要件を満たしているかどうかを確認できます。実際のアプリケーションは、http:// localhost/yii2-app-basic/web/から実行されます。
composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic

これは、最初に気付くべき重要なことです。アイデアは、Symfonyと同様に、アプリケーションのドキュメントルートを/path/to/application/webに設定することです。ディレクトリレイアウトは、バージョン1.1から少し変更されました。よく見ると、変更は理にかなっており、アプリケーションのセキュリティを改善します。

以前は、すべてのアプリケーションコンポーネント(モデル、ビュー、コントローラー、フレームワーク、ベンダーライブラリ)は、保護されたフォルダーのドキュメントルートの下に住んでいました。そうすれば、セキュリティは.htaccessファイルに依存して尊重されていました。つまり、アプリケーションはNGINXでデフォルトで100%不安定でした。すべてのアプリケーションコンポーネントをドキュメントルートから遠ざけると、Webサーバーがアプリケーションコンポーネントをユーザーに送信することができなくなります。

実際のフレームワークソースを探していることに気付くかもしれません。フレームワークは、Composerを使用してインストールされたコンポーネントであるため、Vendoryiisoftyiiディレクトリの下に存在します。ここではもっとたくさんありますが、今のところ、私たちはそれをそのままにしておきます。

今のところ、ローカルWebサーバーの構成を変更し、ドキュメントルートを/path/to/application/webに設定しましょう。 virtualhost http://yii2-app-basic.localhost/を追加しましたが、自分の状況に合っているようにします。デフォルトの構成は、URL内のスクリプトファイルを非表示にするように設定されています。 Apacheを使用している場合は、.htaccessファイルをWebディレクトリに追加して、Apacheに書き換えを行うように指示する必要があります。デフォルトではありません。

基本的なYIIアプリケーションを見てください

基本的なアプリケーションが実行されているので、おめでとうございます…
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

ありがとう!これまでのところロケット科学はありません。

Yii 2.0に何を期待するか開始ページ、静的なページ、連絡先ページ、ログインページで開始します。連絡先ページとログインフォームには、以前と同じ機能があります。 Captchaコード、フォーム検証、2人のユーザーがログインできます。ログインします。以前と同じです。何にも近い。それでも、それは良いスタートです。

基本アプリケーションの設計は劇的に変化しました。以前は、Blueprint CSSフレームワークにアプリケーションが構築されていましたが、Twitter Bootstrapから始めました。改善?おそらく青写真と比較されますが、ブートストラップは、Blueprintがこれまでにしようとした以上のものです。
Bootstrapは、あらゆる種類のアプリケーションコンポーネントを提供し、アプリケーションの構築をスピードアップします。一方、すべてのサイトはブートストラップで同じように見えると主張する人もいるかもしれません(テーマはこれを部分的に修正するだけです)、またサイトを大きくします。いずれにせよ、Yii 2.0との統合は、Yii2-Bootstrap拡張で行われます。これにより、ブートストラップコンポーネントをビューに簡単に統合できます。

あなたが気付くもう一つのことは、下部のデバッグバーです。 Symfonyのように、デフォルトでインストールされ、アクティブ化されています。これにより、構成、リクエスト、アプリケーションのロギングに関する多くの情報に迅速にアクセスできます。デバッグ情報でもリクエストの履歴を保持します。

Yii 2.0に何を期待するか yiiは、通常とは異なるエラーを処理します。 YIIは、すべてのエラー(致命的および非致命的)を例外に変換します。これらは、洞察に富んだ出力をレンダリングすることで処理され、あなたが台無しになった時点に向かって、またはコードが通知を生成しました。 Yii 1.1が基本的なPHPエラーに戻ると、コードの概要をうまくレンダリングします。これは私たちのほとんどが感謝するものです。

Yii 2.0に何を期待するかgiiも再び存在し、デフォルトでアクティブ化されます。

Yii 2.0に何を期待するかGIIは、開発をスピードアップするためのもう1つの優れたツールである、最初にコードを生成することで役立ちます。それはあなたのためにモデルとコントローラーを生成します。 CRUDジェネレーターはさらに一歩進んで、すべてのアクションに完全なMVCセットを生成します。 GIIは、Yii :: T()関数をすぐに挿入することにより、国際化に適したコードを生成します。

基本的なアプリケーションには、構築できる単純なコマンドラインアプリケーションも付属しています。 Yii 1.1はすでにこれをサポートしていましたが、Wikiから例を取得する必要があります。

それが基本アプリケーションで見つかるものです。また、利用可能なAdvanced

ユーザーの承認、認証、パスワードの復元。

アプリケーションはフロントとバックエンドに分割されています。

    基本的なバージョンを継続して、詳細を見て、コードに飛び込んでみましょう…
  • 何が変わったのですか?

    多くのことが変わりました。いくつかの変更は最初はあなたを混乱させるかもしれませんが、私はほとんどの変更が理にかなっており、受け入れやすいと思います。面白い、楽しい、または不可解な変更のいくつかがあります。

    PHP 5.4要件により、いくつかの変更が可能になりました。配列の短いタグが利用可能です。また、ビューでエコーショートタグを使用することも安全です。これは、構成設定に依存しなくなったためです。

    小さな変更ですが、速く遭遇します。以前は、Yii :: App()を使用してアプリケーションインスタンスとコンポーネントにアクセスしていました。 YII 2.0では、これは静的関数から静的変数YII :: $ APPに変更されました。
    composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic
    翻訳関数yii :: t()はまだ私たちと一緒です。 Yiiに、i18nコンポーネントを使用して、提供されているテキストを使用している現在の言語に変換するように指示します。変数を置き換えるように指示することもできます

    プレースホルダーのフォーマットとスタイリングは真剣に作り直されており、より多くのフォーマットオプションが可能になります。いくつかの例:

    このプレースホルダーのフォーマットのため、dateTimeFormatterはなくなりました:
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php

    この機能は、ICUライブラリによって提供されます。 YIIドキュメントは、これのための元のドキュメントを「非常に不可解」と呼びます。私はあなたがそれを読んでそれを理解しようとします... Yiiのドキュメントにもっと読みやすいバージョンが時間内に含まれることを願っています。

    コントローラー
    <span><span><?php
    </span></span><span><span>$elements = array(1,2,3,4); //Yii 1.1
    </span></span><span><span>$elements = [1,2,3,4]; //Yii 2.0
    </span></span><span><span>?></span>
    </span><span><span><?php echo $someVar; ?></span> //Yii 1.1
    </span><span><span><?= $someVar ?></span> //always safe to use in Yii 2.0</span>

    以前は、YIIアクセス制御機能を使用したい場合、AccessControl()はコントローラーの関数になります。 Yii 2.0では、アクセス制御はコントローラーの動作の一部です():

    <span><span><?php
    </span></span><span><span>echo `Yii<span>::</span>t('app', 'Hello, {username}!', [
    </span></span><span>  <span>'username' => $username,
    </span></span><span><span>]);
    </span></span><span><span>?></span></span>

    これは、Yii 1.1の方法とほぼ同じです。

    私は、例のコード(フレームワーク自体ではない!)に多くのdocblockが欠落しており、@inheritdocのコメントがたくさんあることに気づきました。これはあなたが例から期待するものではありませんが、私はこれが時間内に修正されると思います。

    モデル

    基本モデル(以前のcmodel)はあまり変わりませんでした。シナリオにより、検証ルールの実施を変更できるようになりました。現在のシナリオに基づいて検証する必要があるものを変更できます(つまり、フロントまたはバックエンドから使用する場合、異なるルールを持つモデル)。 ただし、派生したActiverCordはいくつかの深刻な変更を受けました。 ActiverCordで検索するための構文は、CDBCriteriaがなくなったため、クエリを書くようなものになりました。アクティブクエリに置き換えられました情報を取得しやすいものにします:

    <span><span><?php
    </span></span><span><span>echo <span>\Yii</span>::t('app', '{n, number} is spelled as {n, spellout}', ['n' => 81]);
    </span></span><span><span>echo <span>\Yii</span>::t('app', 'You are {n, ordinal} in line, please hold.', ['n' => 3]); //Will echo "You are 3rd in line, please wait.".
    </span></span><span><span>echo <span>\Yii</span>::t('app', 'There {n, plural, =0{are no cats} =1{is one cat} other{are # cats}}!', array(
    </span></span><span>    <span>'n' => 14,
    </span></span><span><span>));
    </span></span><span><span>?></span></span>

    関係の定義も劇的に変更されました。たとえば、ユーザーがコメントする記事を投稿するブロガーを含むサイトを使用してみましょう。著者テーブルの関係定義については、以下に説明します。 Yii 1.1:

    でどのように見えるかを始めます
    composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic

    ご覧のとおり、アクティブなレコードのすべての関係を大規模な配列に定義します。 YII 2.0では、これらすべての関係に対してActiveQueryオブジェクトを返すGetterメソッドを定義する必要があります。 中間テーブル間の関係を定義するには、関連性のあるキーワードを「スルー」を使用する必要があります。

    これを定義する2つのオプションがあります。通常、関係関数でvia()メソッドを使用します。ピボットテーブルの後にテーブル内のデータのみが必要な場合は、viatable()メソッドを使用して関係を定義することもできます。上記と同じ例ですが、現在はYii 2.0:

    の場合は
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php

    これはかなり簡単な例です。 ActiveQueryオブジェクトを返すゲッター関数を介して関係を定義することで、さらに多くのことが可能になります。たとえば、返されたActiveQueryにwhere()callを追加することで、50を超えるコメントを取得する投稿のクエリを実行する特定の関数を追加できます。

    興味深い追加は、DBMS関係を定義する可能性です。たとえば、mysqlとmongodbまたはredisの関係を定義し、アプリケーションでそれらを1つのオブジェクトとして使用できます。

    ビュー

    ビューで注意すべき主なことは、これがコントローラーインスタンスをもはや指すものではないということです。ビューでは、$これはYiiWebviewオブジェクトのインスタンスです。コントローラーは、$ this-> contextからアクセスできます。

    前に言ったように

    。 PHP 5.4は、短いエコータグを一貫して利用できるようにします。これにより、混合PHPとHTMLで構成されるビューがより読みやすくなります。

    render()およびrenderPartial()関数も変更されました。レンダリングされた出力を自動的にエコーする前に、レンダリングされた出力を文字列として取得するために追加のパラメーターを追加する必要があります。 YII 2.0は、常にrender()に文字列を返します - コールのように、ウィジェットの動作方法とより一致するようにします。 yii 1.1
    <span><span><?php
    </span></span><span><span>$elements = array(1,2,3,4); //Yii 1.1
    </span></span><span><span>$elements = [1,2,3,4]; //Yii 2.0
    </span></span><span><span>?></span>
    </span><span><span><?php echo $someVar; ?></span> //Yii 1.1
    </span><span><span><?= $someVar ?></span> //always safe to use in Yii 2.0</span>
    からのアップグレード

    Yii 1.1アプリケーションを時間内にYii 2.0にアップグレードすることを検討する必要がありますか?

    ブルーノškvorcは最近、SitePointでレガシーコードについて書いた。彼は、2か月で行うことができる書き直しを考慮する必要があると主張しています。

    特に

    使用しているソフトウェアがビジネス重要である場合。私は彼に同意し、あなたがあなたのアプリケーションについて真剣に感じていて、YII 1.1の終わりを超えてそれを維持したいなら、あなたはそれを考慮することを提案します。しかし、いつものように;それはあなたの状況に依存します。

    YII WebサイトでYIIをアップグレードする専用の特別なページがあります。今のところ、最大の問題はあなたの拡張です。多くの拡張機能に依存している場合、コミュニティがYII 2.0の拡張機能を作成する(再)作成するのに時間がかかるため、苦労するでしょう。あなたが本当のプロである場合、もちろん、使用している拡張機能を真剣に検討し、それらを書くことを(再)考慮することができます。

    移行マニュアルには、アプリケーションでYii 1.1とYii 2.0を一緒に実行するセクションがあります。大規模なプロジェクトでは、これは安全な移行パスを作成する良い方法です。一般的なコードをYii 2.0に移行し、より複雑なまたは拡張に満ちた部品に時間をかけてください。

    結論

    Yii 2.0の決定的なガイドを調べることで、Yii 2.0を始めることにますます熱心になります。プリプロダクションコードの問題を危険にさらすことができなかったため、私はすでに新しいプロジェクトでそれを使用するのを止めなければなりませんでした。

    Yii 2.0のドキュメント品質は、Yii 1.1から改善されました。数年前にYII 1.1を始めたときに何かを理解するのに苦労しましたが、ドキュメントは以前よりも広範囲であると感じています。

    すでにYii 2.0を見たことがありますか、それともすでに何かを構築しましたか?出会ったことを教えてください。私はあなたの経験を知りたいです!

    Yii 2.0

    に関するよくある質問

    以前のバージョンと比較してYii 2.0の新機能は何ですか?

    ​​

    YII 2.0には、その前任者に対する多くの新機能と改善が伴います。現在、名前空間の使用をサポートしているため、コード組織がはるかに容易になります。また、より柔軟で強力な新しいルーティングシステムを導入します。 ActiverCordクラスは、NOSQLデータベースを含むより多くのデータベースタイプをサポートするために再設計されています。フレームワークには、新しいRESTFUL API開発サポートも含まれており、APIの構築を容易にします。さらに、YII 2.0は、組み込みのCSRF(クロスサイトリクエスト偽造)保護を含むセキュリティ機能を改善しました。国際化(I18N)サポート。同じメッセージの複数の翻訳を異なる言語で保存できます。また、ロケールに応じて日付、数字、通貨をフォーマットすることもできます。 YII 2.0は、コンテキストに基づいた複数形とメッセージの選択もサポートしています。あなたのアプリケーション。実行されたSQLクエリ、リクエストと応答データ、パフォーマンスタイミングデータなど、アプリケーションに行われた各リクエストに関する情報を収集および表示します。この情報には、アプリケーションのページの下部にあるパネルを介してアクセスできます。

    サードパーティの拡張機能でYII 2.0を拡張するにはどうすればよいですか? 、Composer Package Managerを使用してインストールできます。インストールしたら、Yiiの組み込み機能と同じようにこれらの拡張機能を使用できます。 YIIコミュニティは、ユーザー認証、フォーム検証、データベースの抽象化など、追加の機能を提供する幅広い拡張機能を開発しました。

    YII 2.0はデータベースの移行をどのように処理しますか?

    YII 2.0は、データベースの変更を制御できるバージョンを可能にする強力なデータベース移行ツールを提供します。 YII移行/作成コマンドを使用して、新しい移行を作成できます。移行スクリプトには、移行を適用および戻す方法が含まれます。その後、Yii Migrate/Upコマンドを使用して移行を適用できます。

    Yii 2.0は、Restful API開発をどのようにサポートしますか?ルーティング、リクエスト処理、応答のフォーマット、エラー処理のサポートが含まれます。 ActiveControllerクラスを使用して、APIのCRUD(作成、読み取り、更新、削除)アクションをすばやく生成することもできます。フォーム検証システム。モデルクラスのフォームフィールドの検証ルールを定義できます。フォームが送信されると、YIIはこれらのルールに対して入力データを自動的に検証し、適切なエラーメッセージを生成します。 。従来のユーザー名/パスワード認証と、OAuthやOpenIDなどのより最新の方法の両方をサポートしています。また、組み込みのユーザーモデルを拡張して独自の認証方法を追加することもできます。

    Yii 2.0は、エラー処理とロギングをどのように処理しますか? PHPエラーと例外の両方をキャッチおよび処理できます。エラーは異なる形式でログインし、ファイル、電子メール、ブラウザーなどのさまざまな目的地に送信できます。 PhpunitとSeleniumに基づいています。ユニットテストと機能テストの両方をサポートします。テストケースを作成して、モデル、ビュー、コントローラーをテストできます。テストフレームワークは、ユーザー入力をシミュレートして出力を確認する方法も提供します。

以上がYii 2.0に何を期待するかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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