PHP MVC Framework-zelfstudie
โก Slimme samenvatting
Het PHP MVC-framework scheidt applicatiegegevens en bedrijfslogica van de presentatie door gebruik te maken van modellen, weergaven en controllers. CodeIgniter maakt dit patroon praktisch toepasbaar, waardoor PHP-ontwikkelaars sneller veilige en onderhoudbare webapplicaties kunnen bouwen.

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 voorruiten (zicht) waarmee de bestuurder (controller) het verkeer voor zich in de gaten houdt en vervolgens gas geeft of remt (model), afhankelijk van wat hij voor zich ziet.
Laten we vervolgens eens kijken waarom een โโframework dat op dit patroon is gebaseerd, de moeite waard is om te gebruiken.
Waarom PHP MVC Framework gebruiken?
PHP MVC-frameworks vereenvoudigen het werken met complexe technologieรซn door:
- Het verbergen van alle complexe implementatiedetails
- Het aanbieden van standaardmethoden die we kunnen gebruiken om onze applicaties te bouwen.
- Verhoogde productiviteit van ontwikkelaars, omdat basisimplementaties van activiteiten zoals het verbinden met de database en het valideren van gebruikersinvoer al gedeeltelijk zijn geรฏmplementeerd.
- Het stimuleren van nale adherence aan professionele codeerstandaarden
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 de verzoeken van de gebruiker om resources van de server afhandelt.
Als voorbeeld: wanneer de gebruiker een verzoek indient URL โฆ/index.php?products=lijstDe controller laadt het productmodel om de productgegevens op te halen en geeft de resultaten vervolgens weer in de lijstweergave.
Kort gezegd koppelt de controller de modellen en views aan elkaar, afhankelijk van de gevraagde bronnen.
Weergaves โ Dit onderdeel gaat over het presenteren van de gegevens aan de gebruiker. Dit gebeurt 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 populaire PHP-frameworks en de functies die elk framework biedt.
| Kader | Beschrijving |
|---|---|
|
|
Het is een van de populairste PHP MVC-frameworks, inmiddels in de vierde grote versie (CodeIgniter 4). Het is lichtgewicht en heeft een korte leercurve. Het beschikt over een uitgebreide set bibliotheken waarmee snel websites en applicaties kunnen worden gebouwd. Gebruikers met beperkte kennis van OOP-programmering kunnen het ook gebruiken. Applicaties die met Igniter zijn gebouwd, kunnen snel worden gebruikt. CodeOntstekers omvatten;
|
|
Het is een veilig en lichtgewicht framework gebaseerd op het Hierarchical Model View Controller (HMVC)-principe. Let op: Kohana werd officieel stopgezet in 2017; de laatste stabiele release was 3.3.6 (juli 2016). De community-fork Koseven zette de codebase voort. Bedrijven die Kohana gebruikten zijn onder andere: |
|
Het is gebaseerd op Ruby on Rails en wordt nog steeds actief onderhouden (versie 5.x). Het staat bekend om concepten zoals softwareontwerppatronen, 'convention over configuration', ActiveRecord, enzovoort. CakePHP aangedreven toepassingen omvatten; |
|
|
Het is een krachtig raamwerk dat is;
Het is ideaal voor ontwikkelingping zakelijke toepassingen. In 2020 is Zend Framework overgegaan naar het open-source Laminas-project. Toepassingen die draaien op Zend/Laminas zijn onder andere:
Bedrijven die het Zend-framework hebben gebruikt, zijn onder andere:
|
PHP MVC-framework versus pure PHP: belangrijkste verschillen
Wat verandert een framework nu eigenlijk in de praktijk? Pure PHP geeft je volledige vrijheid, maar elk project komt neer op het volledig opnieuw uitvinden van routing, validatie en database-toegang. Een PHP MVC-framework standaardiseert deze repetitieve taken, waardoor je code consistent blijft in verschillende projecten en teams.
| Aspect | Eenvoudige PHP | PHP MVC-framework |
|---|---|---|
| Code organisatie | Een mix van HTML, SQL en logica in รฉรฉn bestand. | Onderverdeeld in modellen, weergaven en controllers. |
| Database toegang | Handgeschreven vragen op elke pagina | Ingebouwde querybuilder of ORM met parameterbinding |
| Security | De ontwikkelaar moet alle veiligheidsvoorschriften in acht nemen. | Inclusief inputfiltering, XSS- en CSRF-bescherming. |
| Onderhoud | Wijzigingen verspreiden zich op onvoorspelbare wijze door bestanden. | Elke laag kan onafhankelijk van elkaar veranderen. |
๐ Tip: Bouw eerst een klein, eenvoudig PHP-project, zoals de onderstaande opiniepeiling; de problemen met gemengde code maken de waarde van MVC-scheiding duidelijk.
De opiniepeilingapplicatie overzetten naar Codeontsteker
In deze zelfstudieWe hebben een PHP-enquรชteapplicatie gemaakt. Hier zullen we die code overzetten naar... Codeontsteker
- Downloaden de nieuwste versie van CodeOntsteker van hun website.
- ExtracKopieer de inhoud van het gezipte bestand naar je ontwikkelmap in de map van je webserver. We gebruiken in deze les 'ciopinionpoll' als mapnaam.
- Blader naar het URL http://localhost/ciopinionpoll/
De CodeDe welkomstpagina van Igniter hierboven bevestigt dat het framework correct is geรฏnstalleerd. We gaan nu onze opiniepeilingapplicatie overzetten naar Igniter. CodeOntsteker. Zoals u zich wellicht herinnert, was onze applicatie opgedeeld in drie hoofdonderdelen, namelijk:
- Voorste controller โ dit is het onderdeel dat reageert op URL De code wordt in de controller geplaatst en retourneert de gevraagde pagina.
- Model โ dit is de code die reageert op dataverzoeken en de gevraagde data retourneert. Deze code komt in het model te staan.
- Weergaven โ dit is de code die verantwoordelijk is voor het opmaken en weergeven van de gegevens. Deze code wordt in de weergave weergegeven
Instellingen voor databaseconfiguratie
Om de databaseverbinding te configureren:
- Navigeer naar de map ciopinionpoll
- Open de database.php Het bestand bevindt zich in de map application/config.
- Zoek de volgende coderegels
- Stel de gebruikersnaam in op root
- Stel het wachtwoord in op het root-wachtwoord van uw lokale host.
- Stel de databasenaam in op opinion_poll. Let op: we gebruiken de database die in de vorige les is aangemaakt.
- Sla de wijzigingen op en sluit het bestand.
Ons model creรซren
Vervolgens gaan we ons eigen model maken dat het CI_Model uitbreidt. Het CI_Model maakt deel uit van de CodeIgniter-bibliotheken. Het model bevindt zich in de map application/models. opiniepeiling_model.php
<?php
class Opinion_poll_model extends CI_Model
{
public function __construct()
{
parent::__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++)
{
$query = $this->db->select('COUNT(choice) as choices_count')
->where('choice', $i)
->get('js_libraries');
$table_rows .= "<tr><td>" . $libraries[$i] . " Got:</td><td><b>" . $query->row()->choices_count . "</b> votes</td></tr>";
}
return $table_rows;
}
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
- โparent::__construct();โ roept de CI_Model-constructor aan.
- โ$dit->laden->database();โ laadt de databasebibliotheek zodat onze applicatie kan communiceren met de database
- โ$this->db->โ is CodeHet actieve dossier van Igniter. Bekijk dit. link voor meer informatie over het actieve record.
Onze controller maken
Laten we nu de controller aanmaken. We gebruiken de standaardinstellingen. CodeDe Igniter-controller bevindt zich in application/controllers/welcome.php. Vervang de broncode door 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
- De functie `public function __construct()` roept de constructormethode van de klasse `CI_Controller` aan en laadt ons `Opinion_poll_model` model.
- โpublic function index()โฆโ is de functie die verwijst naar index.php. Deze functie gebruikt CodeDe inputklasse van Igniter controleert of er een stem is uitgebracht, voegt deze toe aan de database en toont vervolgens de resultaten. Als de post-array van de inputklasse leeg is, wordt de stempagina geladen.
- โ$this->input->post('โฆ')โ is de CodeIgniter-inputklasse 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
Zoals we in het vorige voorbeeld zagen, hadden we twee HTML-pagina's: รฉรฉn voor het stemmen en รฉรฉn voor de resultaten. We gebruiken dezelfde HTML-code, met minimale aanpassingen, om onze weergaven te maken. Maak de volgende bestanden aan in de map 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 applicatie ciopinionpoll is, navigeer dan naar http://localhost/ciopinionpoll/
De bovenstaande stempagina is afkomstig van onze opinion_poll_form-weergave. Klik op OK zonder een optie te selecteren en u ziet het volgende waarschuwingsbericht.
Stem op je favoriete bibliotheek en klik vervolgens op OK. Je ziet dan de volgende resultatenpagina.
Dit bevestigt dat de drie lagen samenwerken: de controller ontving de stem, het model sloeg deze op en telde hem, en de weergave toonde de totalen.








