Heim >Backend-Entwicklung >PHP-Tutorial >Praktisches OOP: Erstellen einer Quiz -App - MVC
Dieses Tutorial erstellt weiterhin eine Quizanwendung mit einem Bottom-up-Design-Ansatz und dem MVC-Muster (Modell-View-Controller). Teil eins deckte die Erstellung von Quiz- und Fragenunternehmen, eines Platzhalterdaten -Mapper und der Serviceschnittstelle ab. Dieser Teil konzentriert sich auf die Implementierung des Dienstes, der Controller und der Ansichten mithilfe des Slim-Frameworks und schließlich, um den Dummy Mapper durch einen mongoDB-basierten zu ersetzen.
Schlüsselkonzepte:
Service -Implementierung (QuizAppServiceQuiz
)
Die Kerndienstklasse (QuizAppServiceQuiz
) ist unten beschrieben. Beachten Sie, dass Sitzungsvariablen zum Einfachheit halber verwendet werden. Eine robustere Lösung würde eine dedizierte Sitzungsmanagementschicht für breitere Anwendungskontexte verwenden.
<code class="language-php"><?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) }</code>
Der Code für showAllQuizes
, startQuiz
, getQuestion
, checkSolution
, isOver
, getResult
, getCurrentQuiz
, getCurrentQuestionId
und addResult
Methoden bleiben vom Original weitgehend unverändert. Konzentration auf Kernfunktionen.
Slim Framework -Integration
Die schlanke Anwendung ist in index.php
initialisiert, wobei Routing und Rendering eingerichtet ist.
<code class="language-php"><?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();</code>
Die Ansichten (choose-quiz.phtml
, solve-question.phtml
, end.phtml
) bleiben weitgehend gleich und bearbeiten die Darstellung von Daten.
mongoDB mapper (QuizAppMapperMongo
)
Der Mongo
Mapper interagiert mit einer MongoDB -Sammlung. Fehlerbehandlung und robustere Datenvalidierung sollten für die Produktionsanwendung hinzugefügt werden.
<code class="language-php"><?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) }</code>
Denken Sie daran, die HardCoded
Mapper -Instanz in index.php
durch den Mongo
Mapper zu ersetzen, sobald das MongoDB -Setup abgeschlossen ist. Die rowToEntity
-Methode übernimmt die Konvertierung von Datenbankzeilen in Quiz- und Fragenobjekte.
Die Schlussfolgerung und die FAQs bleiben weitgehend gleich und betonen die Vorteile des MVC -Musters, des schlanken Rahmens und des Designs für Serviceschichten. Die Codebeispiele sind für Klarheit vereinfacht. Der vollständige, produktionsbereitete Code müsste umfassendere Fehlerbehandlungen, Eingabeträger und Sicherheitsmaßnahmen erfordern.
Das obige ist der detaillierte Inhalt vonPraktisches OOP: Erstellen einer Quiz -App - MVC. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!