Rumah  >  Artikel  >  rangka kerja php  >  Cipta tapak web Soal Jawab menggunakan rangka kerja Yii

Cipta tapak web Soal Jawab menggunakan rangka kerja Yii

WBOY
WBOYasal
2023-06-21 09:36:021183semak imbas

Rangka kerja Yii ialah rangka kerja PHP yang berkuasa yang boleh membantu pembangun dengan cepat membina aplikasi web berprestasi tinggi dan boleh skala. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Yii untuk mencipta tapak web Soal Jawab.

  1. Persediaan persekitaran

Sebelum bermula, kita perlu memastikan perisian dan alatan yang diperlukan seperti PHP dan MySQL telah dikonfigurasikan dengan betul dalam persekitaran pembangunan tempatan. Pada masa yang sama, kami juga perlu memasang rangka kerja Yii untuk memudahkan kerja pembangunan seterusnya.

Memasang rangka kerja Yii adalah sangat mudah, cuma laksanakan arahan berikut:

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

di mana 4fc59f85b86f3cdcf539b23b3b2209e3 ialah nama projek semasa.

  1. Reka Bentuk Pangkalan Data

Sebelum mencipta tapak web Soal Jawab, kami perlu mereka bentuk struktur pangkalan data yang berkaitan. Dalam artikel ini, kami akan menggunakan jadual pangkalan data berikut:

  • pengguna: digunakan untuk menyimpan maklumat pengguna, termasuk nama pengguna, kata laluan, e-mel, dsb.
  • soalan: digunakan untuk menyimpan soalan Maklumat, termasuk tajuk soalan, kandungan, masa keluaran, dsb.;
  • jawapan: digunakan untuk menyimpan maklumat jawapan, termasuk kandungan jawapan, masa menjawab, dsb.

Di sini kami menggunakan MySQL sebagai pangkalan data back-end dan mencipta pangkalan data dan jadual yang sepadan melalui arahan berikut:

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`)
);

Perhatikan bahawa kami telah menetapkan kunci asing dalam jadual untuk mengaitkan lembaran data yang berbeza.

  1. Buat model

Dalam rangka kerja Yii, model ialah alatan yang paling biasa digunakan untuk mengendalikan pangkalan data. Kita perlu mencipta fail model yang sepadan untuk mengendalikan jadual pangkalan data yang dibuat sebelum ini.

Dalam folder models di bawah direktori akar aplikasi, kami mencipta tiga fail model User.php, Question.php, Answer.php. Mengambil User.php sebagai contoh, kodnya adalah seperti berikut:

<?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']);
    }
}

Dalam fail ini, kami mentakrifkan atribut model, peraturan pengesahan, kaedah pertanyaan, perkaitan, dsb.

  1. Mencipta Pengawal

Pengawal ialah alatan yang digunakan untuk mengendalikan penghalaan dan membalas permintaan. Dalam folder controllers di bawah direktori akar aplikasi, kami mencipta tiga fail pengawal SiteController.php, QuestionController.php dan AnswerController.php. Mengambil SiteController.php sebagai contoh, kodnya adalah seperti berikut:

<?php
namespace appcontrollers;

use yiiwebController;

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

Dalam fail ini, kami mentakrifkan kaedah bernama actionIndex untuk memaparkan templat halaman utama.

  1. Buat Paparan

Paparan ialah bahagian antara muka pengguna aplikasi, kita perlu mencipta fail paparan yang sepadan untuk memaparkan kandungan. Dalam folder views di bawah direktori akar aplikasi, kami mencipta tiga folder site, question dan answer, sepadan dengan tiga pengawal yang dibuat sebelum ini.

Dalam folder views/site, kami mencipta fail bernama index.php untuk memaparkan templat halaman utama. Kodnya adalah seperti berikut:

<h1>Welcome to the Question & Answer website!</h1>

Dalam folder views/question, kami mencipta fail bernama index.php untuk memaparkan halaman senarai isu. Kodnya adalah seperti berikut:

<h1>Questions</h1>

<?php foreach ($questions as $question): ?>
  <div>
    <h2><?= $question->title ?></h2>
    <p><?= $question->content ?></p>
  </div>
<?php endforeach; ?>

Dalam folder views/answer, kami mencipta fail bernama create.php untuk memaparkan halaman penyuntingan jawapan. Kodnya adalah seperti berikut:

<h1>Create Answer</h1>

<?= $this->render('_form', ['model' => $model]) ?>
  1. Buat laluan

Dalam rangka kerja Yii, penghalaan digunakan untuk memetakan alamat URL kepada pengawal dan kaedah yang sepadan. Kita perlu mencipta peraturan penghalaan yang sepadan dalam fail config dalam folder web.php dalam direktori akar aplikasi. Kodnya adalah seperti berikut:

return [
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
                'question' => 'question/index',
                'answer/create/<question_id:d+>' => 'answer/create',
            ],
        ],
    ],
];

Perhatikan bahawa kami menggunakan parameter dinamik answer/create dalam laluan question_id, yang akan digunakan semasa mencipta jawapan.

  1. Buat sistem kebenaran

Dalam tapak web Soal Jawab, pengguna perlu log masuk untuk bertanya dan menjawab soalan. Kita perlu mencipta sistem kebenaran asas untuk melaksanakan fungsi log masuk dan pendaftaran pengguna.

Dalam SiteController.php, kami menambah dua kaedah actionLogin dan actionSignup untuk memaparkan halaman log masuk dan pendaftaran. Dalam UserController.php, kami menambah kaedah bernama actionCreate untuk mengendalikan permintaan pendaftaran pengguna. Pelaksanaan kod khusus ditinggalkan.

  1. Laksanakan fungsi Soal Jawab

Dalam laman web Soal Jawab, pengguna perlu bertanya dan menjawab soalan. Kita perlu mencipta fungsi yang berkaitan untuk melaksanakan kedua-dua operasi ini.

Dalam QuestionController.php, kami menambahkan dua kaedah actionIndex dan actionCreate untuk memaparkan senarai isu dan halaman penyuntingan isu. Dalam QuestionController.php, kami mencipta kaedah bernama actionCreate yang mengendalikan permintaan penciptaan isu. Pelaksanaan kod khusus ditinggalkan.

Dalam AnswerController.php, kami mencipta kaedah yang dipanggil actionCreate yang mengendalikan permintaan penciptaan jawapan. Pelaksanaan kod khusus ditinggalkan.

  1. Pengujian

Selepas kerja pembangunan di atas, kami telah menyiapkan tapak web Soal Jawab asas. Kita boleh membuka halaman utama dengan melawati http://localhost/4fc59f85b86f3cdcf539b23b3b2209e3 dan senarai soalan dengan melawati http://localhost/4fc59f85b86f3cdcf539b23b3b2209e3/question. Kami juga boleh bertanya dan menjawab soalan melalui pengguna berdaftar.

Atas ialah kandungan terperinci Cipta tapak web Soal Jawab menggunakan rangka kerja Yii. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn