Rumah > pembangunan bahagian belakang > tutorial php > OOP Praktikal: Membina Aplikasi Kuiz - MVC

OOP Praktikal: Membina Aplikasi Kuiz - MVC

Jennifer Aniston
Lepaskan: 2025-02-19 10:40:09
asal
722 orang telah melayarinya

Practical OOP: Building a Quiz App - MVC

Tutorial ini terus membina aplikasi kuiz menggunakan pendekatan reka bentuk bawah dan corak MVC (model-view-controller). Bahagian Satu meliputi penciptaan entiti kuiz dan soalan, pemetaan data pemegang tempat, dan antara muka perkhidmatan. Bahagian ini memberi tumpuan kepada pelaksanaan perkhidmatan, pengawal, dan pandangan menggunakan rangka kerja yang langsing, dan akhirnya, menggantikan pemetaan dummy dengan satu mongoDB yang berasaskan.

Konsep Utama:

  • MVC Architecture: Aplikasi ini menggunakan corak model-view-controller, dengan entiti kuiz dan soalan yang membentuk model, antara muka pengguna sebagai pandangan, dan perkhidmatan kuiz yang menentukan aliran interaksi pengguna ( Pengawal). Rangka Kerja Slim
  • :
  • Slim menyediakan rangka kerja untuk pengawal dan pandangan. Modularitasnya membolehkan penggantian mudah dengan kerangka MVC yang lain.
  • Akses data:
  • Mapper data menghubungkan ke MongoDB, interaksi pangkalan data abstrak. Ini membolehkan penukaran pangkalan data mudah. ​​ Model Perkhidmatan dan Domain Perkhidmatan: Aplikasi ini menggunakan lapisan perkhidmatan untuk merangkum logik perniagaan, mematuhi prinsip "model lemak, pengawal nipis" untuk mengekalkan.
  • pelaksanaan agnostisisme: Perkhidmatan ini direka untuk bebas daripada antara muka pengguna, yang membolehkan front-ends yang berbeza (mis., Command line).
  • Pelaksanaan Perkhidmatan ()

Kelas Perkhidmatan Teras () terperinci di bawah. Perhatikan bahawa pembolehubah sesi digunakan untuk kesederhanaan; Penyelesaian yang lebih mantap akan menggunakan lapisan pengurusan sesi khusus untuk konteks aplikasi yang lebih luas. QuizAppServiceQuiz

Kod untuk

, QuizAppServiceQuiz,

,
<?php
namespace QuizApp\Service;

use QuizApp\Service\Quiz\Result;

// ...

class Quiz implements QuizInterface
{
    // ... (constants remain the same)

    // ... (constructor remains the same)

    // ... (showAllQuizes remains the same)

    public function startQuiz($quizOrId)
    {
        // ... (logic remains largely the same)
    }

    // ... (getQuestion remains largely the same)

    public function checkSolution($solutionId)
    {
        // ... (logic remains largely the same)
    }

    // ... (isOver remains largely the same)

    // ... (getResult remains the same)

    // ... (getCurrentQuiz remains largely the same)

    // ... (getCurrentQuestionId remains the same)

    // ... (addResult remains the same)
}
Salin selepas log masuk
Salin selepas log masuk
,

, showAllQuizes, startQuiz, getQuestion, dan checkSolution kaedah tetap tidak berubah dari asal, memberi tumpuan kepada fungsi teras. isOver getResult getCurrentQuiz Integrasi kerangka Slim getCurrentQuestionId addResult

Aplikasi Slim diasaskan dalam

, menyediakan penghalaan dan rendering.

Pandangan (

, index.php,

) kekal sebahagian besarnya, mengendalikan pembentangan data.
<?php
require 'vendor/autoload.php';

session_start();

$service = new \QuizApp\Service\Quiz(
    new \QuizApp\Mapper\HardCoded() //Initially using HardCoded mapper
);
$app = new \Slim\Slim();
$app->config(['templates.path' => './views']);

// Routes (simplified for brevity)
$app->get('/', function () use ($service, $app) {
    $app->render('choose-quiz.phtml', ['quizes' => $service->showAllQuizes()]);
});

$app->get('/choose-quiz/:id', function ($id) use ($service, $app) {
    $service->startQuiz($id);
    $app->redirect('/solve-question');
});

$app->get('/solve-question', function () use ($service, $app) {
    $app->render('solve-question.phtml', ['question' => $service->getQuestion()]);
});

$app->post('/check-answer', function () use ($service, $app) {
    $isCorrect = $service->checkSolution($app->request->post('id'));
    // ... (redirect logic remains the same)
});

$app->get('/end', function () use ($service, $app) {
    $app->render('end.phtml', ['result' => $service->getResult()]);
});

$app->run();
Salin selepas log masuk

choose-quiz.phtml MongoDB mapper () solve-question.phtml end.phtml

Mapper berinteraksi dengan koleksi MongoDB. Pengendalian ralat dan pengesahan data yang lebih mantap perlu ditambah untuk kegunaan pengeluaran.

<?php
namespace QuizApp\Service;

use QuizApp\Service\Quiz\Result;

// ...

class Quiz implements QuizInterface
{
    // ... (constants remain the same)

    // ... (constructor remains the same)

    // ... (showAllQuizes remains the same)

    public function startQuiz($quizOrId)
    {
        // ... (logic remains largely the same)
    }

    // ... (getQuestion remains largely the same)

    public function checkSolution($solutionId)
    {
        // ... (logic remains largely the same)
    }

    // ... (isOver remains largely the same)

    // ... (getResult remains the same)

    // ... (getCurrentQuiz remains largely the same)

    // ... (getCurrentQuestionId remains the same)

    // ... (addResult remains the same)
}
Salin selepas log masuk
Salin selepas log masuk

ingat untuk menggantikan contoh HardCoded mapper dalam index.php dengan pemetaan Mongo sebaik sahaja persediaan MongoDB selesai. Kaedah rowToEntity mengendalikan penukaran baris pangkalan data ke dalam kuiz dan objek soalan.

Kesimpulan dan Soalan Lazim tetap sama, menekankan manfaat corak MVC, rangka kerja tipis, dan reka bentuk lapisan perkhidmatan. Contoh kod dipermudahkan untuk kejelasan. Lengkap, kod siap sedia akan memerlukan pengendalian ralat yang lebih komprehensif, pengesahan input, dan langkah keselamatan.

Atas ialah kandungan terperinci OOP Praktikal: Membina Aplikasi Kuiz - MVC. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan