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.
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 <project_name>
ialah nama projek semasa.
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:
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.
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.
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.
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]) ?>
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.
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.
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.
Selepas kerja pembangunan di atas, kami telah menyiapkan tapak web Soal Jawab asas. Kita boleh membuka halaman utama dengan melawati http://localhost/<project_name>
dan senarai soalan dengan melawati http://localhost/<project_name>/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!