Yiiについて

Yii は、Webアプリケーションをすばやく構築するのに役立つ高性能のPHPオブジェクト指向フレームワークです。 設計方法により、より「退屈な」コード定義タスクを処理しながら、アプリケーションを独自のものにすることに集中できます。 ロジックをプレゼンテーションから明確に分離するためのMVCパターンに従い、非常に多くのセキュリティ強化機能を備えています。

このチュートリアルでは、前回YiiフレームワークをVPSにインストールし、最初のアプリケーションを作成したときに開始した内容を継続します。 覚えているかと思いますが、URLクリーンアップの設定も少し行い、アプリケーションで使用するMySQLデータベースをリンクしました。

次に、Yiiが提供するコード生成ツールのいくつかを使用して、データの最初のモデルをセットアップします。 次に、CRUD操作のコードを生成します。 最後に、典型的なYiiアプリケーションワークフローがどのように機能するかを見ていきます。 ただし、最初に、前回接続したデータベースに、コンテンツを保持するためのテーブルを作成しましょう。たとえば、ニュースなどです。

覚えているかと思いますが、私たちが作成したデータベースはdb_tutorialと呼ばれています。 コマンドラインに移動して、このデータベースにテーブルを作成しましょう。 これを行うためのSQLスキルを磨くには、MySQLおよびMariaDBでのテーブルの作成と使用に関するこの記事を確認してください。 したがって、 news というテーブルが必要です。このテーブルには、id(プライマリおよび自動インクリメント)、title、およびbodyの3つの列が含まれています。

お急ぎの場合は、次のコマンドを使用してテーブルを作成できます。

CREATE TABLE news (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
title VARCHAR(256),
body TEXT);

埋める必要はありません。Yiiを使用してこれをうまく行います。

モデル

CRUDは、Webアプリケーションが実行しなければならない最も一般的なタスクの1つです。 データベースからのデータの作成、読み取り、更新、および削除は非常に重要であり、通常、これらのタスクを実行するすべての関数を自分で作成する必要があります。 ここでYiiが楽しくなります。 WebベースのコードジェネレーターであるGiiを使用すると、基本的なCRUDコードを自動的に作成できます。 それでは、それがどのように機能するかを見てみましょう。

Giiを使用するには、まずそれを有効にする必要があります。 前のチュートリアルで変更を加えたprotected/configフォルダーにある同じmain.phpファイルに、コメントを外す必要のあるコードのブロックがあります。 Giiを有効にするため:

/*
  'gii'=>array(
    'class'=>'system.gii.GiiModule',
    'password'=>'Enter Your Password Here',
    // If removed, Gii defaults to localhost only. Edit carefully to taste.
    'ipFilters'=>array('127.0.0.1','::1'),
  ),
*/

コメントを削除し、ブラウザでGiiにアクセスするために使用するパスワードを指定します。 ここで、アプリケーションをインストールした場所に応じて、ipFiltersパラメーターも変更する必要があります。 デフォルトでは、Giiはローカルホストからのみアクセスできます。 したがって、サーバーがリモートの場合、デフォルトは機能しません。 したがって、開発中に、falseに設定してから、完了後の状態に戻すことができます。

'ipFilters'=>false,

または、接続を許可することがわかっている特定のIPアドレスを設定することもできます。 ファイルを保存してブラウザに移動します。 よりクリーンなURLに関する前の記事の手順に従った場合は、次の場所に移動する必要があります。

http://example.com/mysite/gii

そうでない場合は、次のURLにアクセスしてください。

http://example.com/mysite/index.php?r=gii

これにより、指定したパスワードの入力を求められ、そこでコード生成オプションを確認する必要があります。 ただし、CRUDコードを生成する前に、作成したテーブルのModelクラス( news )が必要です。 したがって、モデルジェネレーターをクリックして、指示に従います。 基本的には、テーブル名フィールドに入力してプレビューを押すだけです。 次に、コードをプレビューして、生成をクリックします。

ファイルを書き込めません」などのエラーが発生した場合は、Webサーバーに protected /modelsフォルダーへの書き込み権限があることを確認してください。 これを行うには、まず、ターミナルから次のコマンドを実行して、フォルダーのグループ所有権を www-data グループに割り当てます(アプリケーションのルートフォルダーにいることを確認してください)。

chown root:www-data protected/models

これにより、フォルダの所有者がrootユーザーおよびwww-dataグループになります。 Apacheは、www-dataグループの一部であるwww-dataユーザーとしてサイトで動作することに注意してください。 次に、www-dataグループもそのフォルダーに書き込めることを確認します。

chmod 775 protected/models

CRUD(作成、読み取り、更新、削除)

これで、Newsテーブルと通信するためのModelクラスができました。 内部のデータの操作を実装するためのCRUDコードをすばやく生成しましょう。 以前と同じURL( mysite / gii )に戻りますが、今回は Crudgeneratorを選択します。 [モデルクラス]フィールドで、作成したモデル名(ニュース)を指定し、プレビューおよび生成をクリックします。 ただし、フォルダ protected /controllersおよびprotected/ views がサーバーによって書き込み可能であることを再度確認してください(まだわからない場合は、上記の方法を参照してください)。

CRUDコードを生成した後、それを試すためのリンクを含む成功メッセージが表示されます。 newsテーブルのレコードを表示するページに移動します。 空なので何も見つかりません。 ただし、右側には、ニュースを作成および管理するためのリンクを含むメニューが表示されます。 ニュースの作成、読み取り、更新、削除を試してみてください。 [ニュースの管理]セクションには、コンテンツを管理するための検索、並べ替え、フィルター機能もあります。これらはすべて「すぐに」使用できます。 さらに、Giiを使用してコントローラー、フォーム、およびモデルクラスを生成することもできますが、このチュートリアルではそれについては説明しません。

アプリケーションワークフロー

アプリケーションでデータのCRUDコードを生成するのがいかに簡単であるかを理解したので、リクエストのYiiルーティングがどのように機能するかを少し理解しましょう。 Yiiは、モデルビューコントローラー(MVC)デザインパターンを実装して、ロジックをプレゼンテーションから適切に分離します。 さらに、アプリケーションと呼ばれるフロントコントローラーを使用して、ユーザーリクエストに関する情報を収集し、適切なコントローラーに転送して処理します。 それで、それはどのように機能しますか? すべての詳細に立ち入ることなく、以下はあなたにかなり明確な理解を与えるはずです:

(前のチュートリアルで行ったように)クリーンアップせずにデフォルトのURL構造を考慮して、ユーザーが次のことを要求したとします。 http://example.com/mysite/index.php?r=news/view&id=1 。 クリーンURLの場合、これはhttp://example.com/mysite/news/1になります。

ブートストラップindex.phpスクリプトは、 urlManager コンポーネントによって支援されたアプリケーションをインスタンス化し、要求されたコントローラーとそのアクション(この場合は news [)を決定します。 X212X](NewsControllerクラスにあります)およびview。 アプリケーションは、要求されたコントローラーのインスタンスを作成し、それがアクション(この場合は actionView )を実行します。 次に、アクションはデータベースからIDが1のニュースモデルを読み取り、ブラウザーのユーザーに対して show (レイアウトに埋め込まれます)という名前のビューに表示します。

これが、ユーザー要求をルーティングするためのそれほど珍しいMCVパターンではありません。 Yiiアプリケーションの典型的なワークフローの概要と、すべてのプロセスの正確なステップバイステップの説明については、このページを確認してください。

結論

このチュートリアルでは、YiiがこのようなクールなPHPフレームワークである理由を見てきました。 モデル、コントローラー、さらには通常のCRUD操作機能を非常に簡単に生成できるため、このコードをすべて記述する必要はありません。 あなたはただあなたのアプリケーションにあなたが望むことをさせることに集中する必要があります。

投稿者: Danny