PHP MVC Framework-zelfstudie: CodeIgniter-voorbeeld
Wat is een PHP MVC-framework?
PHP MVC is een applicatieontwerppatroon dat de applicatiegegevens en bedrijfslogica (model) scheidt van de presentatie (weergave). MVC staat voor Model, View & Controller.
De controller bemiddelt tussen de modellen en views.
Beschouw het MVC-ontwerppatroon als een auto en de bestuurder.
De auto heeft de voorruiten (view) die de bestuurder (controller) gebruikt om het verkeer voor zich in de gaten te houden en vervolgens de snelheid of rem (model), afhankelijk van wat hij vooruit ziet.
Waarom PHP MVC Framework gebruiken?
- PHP MVC Frameworks vereenvoudigen het werken met complexe technologieën door:
- Het verbergen van alle complexe implementatiedetails
- Het bieden van standaardmethoden die we kunnen gebruiken om onze applicaties te bouwen.
- Verhoogde productiviteit van ontwikkelaars, dit komt doordat de basisimplementatie van activiteiten zoals verbinding maken met de database, het opschonen van gebruikersinvoer enz. al gedeeltelijk zijn geïmplementeerd.
- Naleving van professionele coderingsnormen
PHP MVC-ontwerppatroon
Laten we nu kort elk onderdeel van het MVC-ontwerppatroon bespreken.
Model – dit deel gaat over de bedrijfslogica en de applicatiegegevens. Het kan worden gebruikt om gegevensvalidaties uit te voeren, gegevens te verwerken en op te slaan. De gegevens kunnen afkomstig zijn van;
- plat bestand
- databank
- XML-document
- Andere geldige gegevensbronnen.
Controller – dit is het gedeelte dat zich bezighoudt met de verzoeken van gebruikers om bronnen van de server.
Als de gebruiker bijvoorbeeld om de URL vraagt …/index.php?products=lijst, laadt de controller het productmodel om de productgegevens op te halen en voert vervolgens de resultaten uit in de lijstweergave.
Kort gezegd koppelt de controller de modellen en views aan elkaar, afhankelijk van de gevraagde bronnen.
Weergaves – dit deel gaat over het presenteren van de gegevens aan de gebruiker. Dit is meestal in de vorm van HTML-pagina's.
Soorten PHP MVC-framework
Het selecteren van het beste PHP-framework is een uitdaging.
U hoeft geen eigen raamwerk te schrijven om te profiteren van de voordelen van MVC.
Probeer alleen uw eigen MVC-gerelateerde applicatieontwerp te maken om te begrijpen hoe MVC-frameworks werken.
Als u eenmaal vertrouwd bent met de manier waarop MVC-frameworks werken, moet u overstappen op de volwassen en reeds geteste frameworks.
De onderstaande tabel beschrijft kort enkele van de populaire PHP-frameworks en de functies die elk framework biedt.
Kader | BESCHRIJVING |
---|---|
|
Het is een van de meest populaire PHP MVC-frameworks. Het is lichtgewicht en heeft een korte leercurve. Het heeft een rijke reeks bibliotheken waarmee u snel websites en applicaties kunt bouwen. Gebruikers met beperkte kennis van OOP-programmering kunnen het ook gebruiken. Door CodeIgniter aangedreven applicaties omvatten; |
![]()
|
Het is een Hierarchical Model View Controller HMVC veilig en lichtgewicht framework. Het heeft een rijke set componenten voor het snel ontwikkelen van applicaties. Bedrijven die Kohana gebruiken zijn onder andere; |
![]()
|
Het is gemodelleerd naar Ruby on rails. Het staat bekend om concepten zoals software design patterns, convention over configuration, ActiveRecord etc. CakePHP aangedreven toepassingen omvatten; |
![]()
|
Het is een krachtig raamwerk dat is;
Het beschikt over API's van leveranciers zoals AmazonGoogle, Flickr, Yahoo etc. Het is ideaal voor het ontwikkelen van zakelijke applicaties. Zend-aangedreven toepassingen omvatten;
Bedrijven die het Zend-framework gebruiken, zijn onder meer;
|
De opiniepeilingtoepassing overzetten naar CodeIgniter
In deze zelfstudie, hebben we een PHP-poll-applicatie gemaakt. Hier zullen we die code overbrengen naar CodeIgniter
- Download de nieuwste versie van CodeIgniter van hun website.
- Pak de inhoud van het gezipte bestand uit naar uw ontwikkelingsmap in de map van uw webserver. In deze les gebruiken we ciopinionpoll als mapnaam.
- Blader naar de URL http://localhost/ciopinionpoll/
We gaan nu onze opiniepeilingtoepassing overzetten naar CodeIgniter. Bedenk dat onze applicatie was verdeeld in drie hoofdcomponenten, namelijk de;
- Frontcontroller – dit is het onderdeel dat reageert op URL-verzoeken en de opgevraagde pagina retourneert. Deze code komt in de controller
- Model – dit is de code die reageert op de gevraagde gegevens en de gevraagde gegevens retourneert. Deze code wordt in het model geplaatst
-
Weergaven – dit is de code die verantwoordelijk is voor het opmaken en weergeven van de gegevens. Deze code wordt in de weergave weergegeven
- Blader naar de map ciopinionpoll
- Open de database.php bestand in de map application/config.
- Zoek de volgende coderegels
Instellingen voor databaseconfiguratie
- Stel de gebruikersnaam in op root
- Stel het wachtwoord in op uw localhost root-wachtwoord
- Databasenaam naar opiniepeiling. Let op: we zullen de database gebruiken die in de vorige les is gemaakt.
- Sla de wijzigingen op en sluit het bestand.
Ons model creëren
Vervolgens gaan we ons model maken dat het CI_Model zal uitbreiden. Het CI_Model maakt deel uit van de CodeIgniter-bibliotheken. Het model bevindt zich in applicatie/modellen opiniepeiling_model.php
<?php class Opinion_poll_model extends CI_Model { public function __construct() { $this->load->database(); } public function total_votes() { $query = $this->db->select('COUNT(choice) as choices_count')->get('js_libraries'); return $query->row()->choices_count; } public function get_results() { $libraries = array("", "JQuery", "MooTools", "YUI Library", "Glow"); $table_rows = ''; for ($i = 1; $i < 5; $i++) { $sql_stmt = "SELECT COUNT(choice) choices_count FROM js_libraries WHERE choice = $i;"; $result = $model-> select($sql_stmt); $table_rows .= "<tr><td>" . $ libraries [$i] . " Got:</td><td><b>" . $result[0] . "</b> votes</td></tr>"; } public function add_vote($choice) { $ts = date("Y-m-d H:i:s"); $data = array('choice' => $choice, 'ts' => $ts); $this->db->insert('js_libraries', $data); } } ?>
HIER,
- "class Opinion_poll_model breidt CI_Model uit..." is ons model dat het CI_Model uitbreidt
- “…ouder:: __construct();” roept de CI_Model-constructor aan
- “$dit->laden->database();” laadt de databasebibliotheek zodat onze applicatie kan communiceren met de database
- “$this->db->” is het actieve record van CodeIgniter. Check dit link voor meer informatie over het actieve record.
Onze controller maken Laten we nu de controller maken. We gebruiken de standaard CodeIgniter-controller in application/controllers/welcome.php. Vervang de broncodes met de volgende code.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); class Welcome extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('opinion_poll_model'); } public function index() { if ($this->input->post('submitbutton') && !$this->input->post('vote')) { echo "<script>alert('You did not vote!');</script>"; } if ($this->input->post('vote')) { $this->opinion_poll_model->add_vote($this->input->post('vote')); $data['total_votes'] = $this->opinion_poll_model->total_votes(); $data['rows'] = $this->opinion_poll_model->get_results(); $this->load->view('results', $data); } else { $this->load->view('opinion_poll_form'); } } } /* End of file welcome.php */ /* Location: ./application/controllers/welcome.php */ ?>
HIER,
- “if (!gedefinieerd('BASEPATH')) exit('Geen directe scripttoegang toegestaan');” zorgt ervoor dat gebruikers niet rechtstreeks toegang krijgen tot de controllerklasse
- "class Welcome breidt CI_Controller uit..." onze controller breidt de klasse CI_Controller uit
- “public function __construct()” roept de class constructor-methode van CI_Controller aan en laadt ons Opinion_poll_model-model
- "public function index()..." is de functie die wordt toegewezen aan index.php. het gebruikt de invoerklasse van CodeIgniter om te controleren of er een stem is uitgebracht, voegt deze toe aan de database en geeft vervolgens de resultaten weer. Als de post-array van de invoerklasse leeg is, wordt de stempagina geladen.
- “$this->input->post('…')” is de CodeIgniter-invoerklasse die de inhoud van de globale variabele $_POST ophaalt.
- “$this->opinion_poll_model->add_vote($this->input->post('vote'))” roept de add_vote-methode van het model aan om de stem aan de database toe te voegen.
Onze opvattingen creëren
Herinner u uit het vorige voorbeeld dat we twee HTML-pagina's hadden, een voor het stemmen en de andere voor de resultaten. We gebruiken dezelfde HTML-code met minimale aanpassingen om onze weergaven te maken. Maak de volgende bestanden in de directory application/views
opinion_poll_form.php <html> <head> <title> JavaScript Libraries - Opinion Poll </title> </head> <body> <h2>JavaScript Libraries - Opinion Poll</h2> <p><b>What is your favorite JavaScript Library?</b></p> <form method="POST" action="index.php"> <p> <input type="radio" name="vote" value="1" /> JQuery <br /> <input type="radio" name="vote" value="2" /> MooTools <br /> <input type="radio" name="vote" value="3" /> YUI Library <br /> <input type="radio" name="vote" value="4" /> Glow </p> <p> <input type="submit" name="submitbutton" value="OK" /> </p> </form> </body> </html>
Laten we nu de resultatenpagina results.php maken
<html> <head> <title>JavaScript Libraries - Opinion Poll Results</title> </head> <body> <h2>JavaScript Libraries - Opinion Poll Results</h2> <p><b>What is your favorite JavaScript Library?</b></p> <p><b><?php echo $total_votes; ?></b> people have thus far taken part in this poll:</p> <p><table><tr><td> <?php print($rows); ?> </tr></td></table></p> <p><a href="#">Return to voting page</a></p> </body> </html>
Onze applicatie testen
Ervan uitgaande dat de hoofdmap van uw toepassing ciopinion is, bladert u naar http://localhost/ciopionpoll/
Klik op de OK-knop, u ziet het volgende waarschuwingsbericht
Stem op uw favoriete kandidaat en klik vervolgens op OK. U ziet dan de volgende resultatenpagina
Conclusie
CodeIgniter is een eenvoudig te leren en te gebruiken PHP MVC-framework dat de tijd die wordt besteed aan het ontwikkelen van applicaties aanzienlijk kan verminderen.
CodeIgniter is een eenvoudig te leren en te gebruiken PHP MVC-framework dat de tijd die wordt besteed aan het ontwikkelen van applicaties aanzienlijk kan verminderen.
Samenvatting
- Een raamwerk is een reeks bibliotheken die een gedeeltelijke implementatie van algemene taken mogelijk maken.
- PHP heeft een aantal open source volwassen en geteste MVC-frameworks.
- Een goede ontwikkelingsaanpak scheidt de gegevens van de presentatie en moedigt het gebruik van één toegangspunt tot een applicatie aan.
- Traditionele PHP-applicaties die de best practices voor applicatieontwerp volgen, kunnen met minimale aanpassingen worden overgezet naar MVC-frameworks.