ホームページ  >  記事  >  PHPフレームワーク  >  Yii フレームワークを使用して Q&A ウェブサイトを作成する

Yii フレームワークを使用して Q&A ウェブサイトを作成する

WBOY
WBOYオリジナル
2023-06-21 09:36:021195ブラウズ

Yii フレームワークは、開発者が高性能でスケーラブルな Web アプリケーションを迅速に構築できる強力な PHP フレームワークです。この記事では、Yii フレームワークを使用して Q&A ウェブサイトを作成する方法を紹介します。

  1. 環境の準備

開始する前に、PHP や MySQL などの必要なソフトウェアやツールがローカル開発環境で正しく構成されていることを確認する必要があります。同時に、その後の開発作業を容易にするために Yii フレームワークをインストールする必要もあります。

Yii フレームワークのインストールは非常に簡単です。次のコマンドを実行するだけです:

composer create-project yiisoft/yii2-app-basic <project_name>

ここで、4fc59f85b86f3cdcf539b23b3b2209e3 は現在のプロジェクトの名前です。

  1. データベース設計

Q&A Web サイトを作成する前に、関連するデータベース構造を設計する必要があります。この記事では、次のデータベース テーブルを使用します:

  • user: ユーザー名、パスワード、電子メールなどを含むユーザー情報の保存に使用されます;
  • question: に使用されます。質問の保存 質問のタイトル、内容、公開時間などの情報;
  • answer: 回答内容、回答時間などの回答情報を保存するために使用されます。

ここでは、バックエンド データベースとして 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`)
);

テーブル内の外部キーを次のように設定していることに注意してください。異なるデータシートを関連付けます。

  1. モデルを作成する

Yii フレームワークでは、モデルはデータベースを操作するために最も一般的に使用されるツールです。以前に作成したデータベーステーブルを操作するには、対応するモデルファイルを作成する必要があります。

アプリケーション ルート ディレクトリの models フォルダーに、3 つのモデル ファイル User.phpQuestion.php を作成します。回答.phpUser.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']);
    }
}

このファイルでは、モデルの属性、検証ルール、クエリ メソッドと関係などを定義します。

  1. コントローラーの作成

コントローラーは、ルーティングとリクエストへの応答を処理するために使用されるツールです。アプリケーションのルート ディレクトリの controllers フォルダーに、3 つのコントローラー ファイル SiteController.phpQuestionController.phpAnswerController.php を作成します。 。 SiteController.php を例にとると、コードは次のとおりです。

<?php
namespace appcontrollers;

use yiiwebController;

class SiteController extends Controller
{
    public function actionIndex()
    {
        return $this->render('index');
    }
}

このファイルでは、ホームページ テンプレートをレンダリングするための actionIndex という名前のメソッドを定義します。

  1. ビューの作成

ビューはアプリケーションのユーザー インターフェイス部分であり、コンテンツをレンダリングするために対応するビュー ファイルを作成する必要があります。アプリケーションのルート ディレクトリの views フォルダーに、前の 3 つのフォルダーの作成に対応する sitequestionanswer という 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]) ?>
  1. ルーティングの作成

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 を使用したことに注意してください。このパラメータは、回答の作成時に使用されます。

  1. 認証システムを作成する

Q&A Web サイトで、ユーザーは質問したり回答したりするためにログインする必要があります。ユーザーのログインおよび登録機能を実装するには、基本的な認証システムを作成する必要があります。

SiteController.php に、ログイン ページと登録ページをレンダリングするための 2 つのメソッド actionLoginactionSignup を追加しました。 UserController.php に、ユーザー登録リクエストを処理するための actionCreate という名前のメソッドを追加しました。特定のコードの実装は省略されています。

  1. Q&A 機能の実装

Q&A Web サイトでは、ユーザーは質問と回答を行う必要があります。これら 2 つの操作を実装するには、関連する関数を作成する必要があります。

QuestionController.php に、質問リストと質問編集ページをレンダリングするための 2 つのメソッド actionIndexactionCreate を追加しました。 QuestionController.php で、質問作成リクエストを処理するための actionCreate というメソッドを作成しました。特定のコードの実装は省略されています。

AnswerController.php で、回答作成リクエストを処理するための actionCreate という名前のメソッドを作成しました。特定のコードの実装は省略されています。

  1. テスト

上記の開発作業を経て、基本的な Q&A ウェブサイトが完成しました。 http://localhost/4fc59f85b86f3cdcf539b23b3b2209e3 にアクセスするとホームページが開き、http://localhost/4fc59f85b86f3cdcf539b23b3b2209e3/question にアクセスすると質問リストが開きます。登録ユーザーを通じて質問や回答をすることもできます。

以上がYii フレームワークを使用して Q&A ウェブサイトを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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