Yii フレームワークは、開発者が高性能でスケーラブルな Web アプリケーションを迅速に構築できる強力な PHP フレームワークです。この記事では、Yii フレームワークを使用して Q&A ウェブサイトを作成する方法を紹介します。
開始する前に、PHP や MySQL などの必要なソフトウェアやツールがローカル開発環境で正しく構成されていることを確認する必要があります。同時に、その後の開発作業を容易にするために Yii フレームワークをインストールする必要もあります。
Yii フレームワークのインストールは非常に簡単です。次のコマンドを実行するだけです:
composer create-project yiisoft/yii2-app-basic <project_name>
ここで、<project_name>
は現在のプロジェクトの名前です。
Q&A Web サイトを作成する前に、関連するデータベース構造を設計する必要があります。この記事では、次のデータベース テーブルを使用します:
ここでは、バックエンド データベースとして MySQL を使用し、次のコマンドを使用して対応するデータベースとテーブルを作成します。
CREATE DATABASE IF NOT EXISTS my_db; USE my_db; CREATE TABLE IF NOT EXISTS `user` ( `id` INT UNSIGNED AUTO_INCREMENT, `username` VARCHAR(64) NOT NULL, `password` VARCHAR(64) NOT NULL, `email` VARCHAR(64) NOT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ); CREATE TABLE IF NOT EXISTS `question` ( `id` INT UNSIGNED AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `content` TEXT, `user_id` INT UNSIGNED NOT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), FOREIGN KEY (`user_id`) REFERENCES user(`id`) ); CREATE TABLE IF NOT EXISTS `answer` ( `id` INT UNSIGNED AUTO_INCREMENT, `content` TEXT, `question_id` INT UNSIGNED NOT NULL, `user_id` INT UNSIGNED NOT NULL, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), FOREIGN KEY (`question_id`) REFERENCES question(`id`), FOREIGN KEY (`user_id`) REFERENCES user(`id`) );
テーブル内の外部キーを次のように設定していることに注意してください。異なるデータシートを関連付けます。
Yii フレームワークでは、モデルはデータベースを操作するために最も一般的に使用されるツールです。以前に作成したデータベーステーブルを操作するには、対応するモデルファイルを作成する必要があります。
アプリケーション ルート ディレクトリの models
フォルダーに、3 つのモデル ファイル User.php
、Question.php
、 を作成します。回答.php
。 User.php
を例にとると、コードは次のとおりです。
<?php namespace appmodels; use yiidbActiveRecord; class User extends ActiveRecord { public function rules() { return [ [['username', 'password', 'email'], 'required'], ['email', 'email'], ['username', 'unique'], ]; } public static function findByUsername($username) { return static::findOne(['username' => $username]); } public function validatePassword($password) { return $this->password === md5($password); } public function getQuestions() { return $this->hasMany(Question::className(), ['user_id' => 'id']); } public function getAnswers() { return $this->hasMany(Answer::className(), ['user_id' => 'id']); } }
このファイルでは、モデルの属性、検証ルール、クエリ メソッドと関係などを定義します。
コントローラーは、ルーティングとリクエストへの応答を処理するために使用されるツールです。アプリケーションのルート ディレクトリの controllers
フォルダーに、3 つのコントローラー ファイル SiteController.php
、QuestionController.php
、AnswerController.php
を作成します。 。 SiteController.php
を例にとると、コードは次のとおりです。
<?php namespace appcontrollers; use yiiwebController; class SiteController extends Controller { public function actionIndex() { return $this->render('index'); } }
このファイルでは、ホームページ テンプレートをレンダリングするための actionIndex
という名前のメソッドを定義します。
ビューはアプリケーションのユーザー インターフェイス部分であり、コンテンツをレンダリングするために対応するビュー ファイルを作成する必要があります。アプリケーションのルート ディレクトリの views
フォルダーに、前の 3 つのフォルダーの作成に対応する site
、question
、answer
という 3 つのフォルダーを作成します。コントローラー。
views/site
フォルダーに、ホームページ テンプレートをレンダリングするための index.php
という名前のファイルを作成します。コードは次のとおりです。
<h1>Welcome to the Question & Answer website!</h1>
views/question
フォルダー内に、質問リスト ページをレンダリングするための index.php
という名前のファイルを作成します。コードは次のとおりです。
<h1>Questions</h1> <?php foreach ($questions as $question): ?> <div> <h2><?= $question->title ?></h2> <p><?= $question->content ?></p> </div> <?php endforeach; ?>
views/answer
フォルダーに、回答編集ページをレンダリングするための create.php
という名前のファイルを作成します。コードは次のとおりです:
<h1>Create Answer</h1> <?= $this->render('_form', ['model' => $model]) ?>
Yii フレームワークでは、ルーティングを使用して URL アドレスを対応するコントローラーとメソッドにマッピングします。アプリケーションのルート ディレクトリの config
フォルダーにある web.php
ファイルに、対応するルーティング ルールを作成する必要があります。コードは次のとおりです:
return [ 'components' => [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => [ '' => 'site/index', 'question' => 'question/index', 'answer/create/<question_id:d+>' => 'answer/create', ], ], ], ];
answer/create
ルートで動的パラメータ question_id
を使用したことに注意してください。このパラメータは、回答の作成時に使用されます。
Q&A Web サイトで、ユーザーは質問したり回答したりするためにログインする必要があります。ユーザーのログインおよび登録機能を実装するには、基本的な認証システムを作成する必要があります。
SiteController.php
に、ログイン ページと登録ページをレンダリングするための 2 つのメソッド actionLogin
と actionSignup
を追加しました。 UserController.php
に、ユーザー登録リクエストを処理するための actionCreate
という名前のメソッドを追加しました。特定のコードの実装は省略されています。
Q&A Web サイトでは、ユーザーは質問と回答を行う必要があります。これら 2 つの操作を実装するには、関連する関数を作成する必要があります。
QuestionController.php
に、質問リストと質問編集ページをレンダリングするための 2 つのメソッド actionIndex
と actionCreate
を追加しました。 QuestionController.php
で、質問作成リクエストを処理するための actionCreate
というメソッドを作成しました。特定のコードの実装は省略されています。
AnswerController.php
で、回答作成リクエストを処理するための actionCreate
という名前のメソッドを作成しました。特定のコードの実装は省略されています。
上記の開発作業を経て、基本的な Q&A ウェブサイトが完成しました。 http://localhost/<project_name>
にアクセスするとホームページが開き、http://localhost/<project_name>/question
にアクセスすると質問リストが開きます。登録ユーザーを通じて質問や回答をすることもできます。
以上がYii フレームワークを使用して Q&A ウェブサイトを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。