Advertisement
  1. Code
  2. PHP

Kohana: Das Swift PHP-Framework

Scroll to top
Read Time: 21 min

() translation by (you can also view the original English article)

Kohana ist ein PHP 5-Framework, das das Architekturmuster Model View Controller (MVC) verwendet. Es gibt mehrere Gründe, warum Sie sich für Kohana entscheiden sollten, aber die wichtigsten sind Sicherheit, Schwerelosigkeit und Einfachheit. In diesem Tutorial stelle ich die Hauptfunktionen vor und zeige Ihnen anhand einer einfachen Demonstration, wie viel Zeit Kohana Ihnen möglicherweise sparen kann.

Schritt 1: Was ist Kohana?

Kohana ist ein PHP5-Framework, das das Architekturmuster Model View Controller verwendet. MVC hält die Anwendungslogik von der Präsentation getrennt. Auf diese Weise können wir saubereren Code erstellen und Zeit für die Fehlersuche sparen. Mit diesem Muster nicht vertraut:

  • Ein Modell repräsentiert Daten, mit denen die Anwendung arbeitet. Normalerweise eine Datenbank.
  • Eine Ansicht enthält Präsentationscode wie HTML, CSS und JavaScript.
  • Ein Controller interpretiert Eingaben des Benutzers und sendet sie an das Modell und/oder die Ansicht.

Kohana war ursprünglich eine Abzweigung von CodeIgniter (CI), einem Open-Source-Produkt von EllisLab. Es gibt viele Ähnlichkeiten zwischen CI und Kohana, aber der gesamte Code ist entweder neu oder vollständig neu geschrieben. Wie Sie auf der offiziellen Kohana-Website lesen können, sind die Hauptmerkmale:

  • Sehr sicher
  • Extrem leicht
  • Kurze Lernkurve
  • Verwendet das MVC-Muster
  • 100% UTF-8-kompatibel
  • Locker gekoppelte Architektur
  • Extrem einfach zu verlängern

Schritt 2: Kohana herunterladen

Lassen Sie uns anfangen. Besuchen Sie die offizielle Website von Kohana http://kohanaphp.com und klicken Sie auf das grüne Kästchen in der rechten Ecke, um die neueste Version herunterzuladen. Alle Kohana-Bibliotheken, -Hilfen und -Ansichten sind im Standard-Download-Paket enthalten. Sie können jedoch bei Bedarf zusätzliche Module, Hersteller-Tools und Sprachen auswählen. Für dieses Tutorial kann das Standardpaket ausreichen. Klicken Sie auf "Kohana herunterladen!" um den Download zu starten.

Schritt 3: Kohana installieren

Sobald Sie den Download abgeschlossen haben:

  1. Entpacken
  2. Benennen Sie den Ordner "Kohana_vx.x.x" in "kohana" um und laden Sie ihn in das Stammverzeichnis Ihres Webservers hoch
  3. Bearbeiten Sie die globale Konfigurationsdatei application/config/config.php wie folgt
  4. 1
    $config['site_domain'] = 'localhost/kohana';
    
  5. Wenn Sie ein Unix-ähnliches System verwenden, haben die Unterverzeichnisse der Installation möglicherweise ihre Berechtigungen während der Zip-Extraktion verloren. Chmod sie alle auf 755 durch Ausführen von find. -type d -exec chmod 755 {} \; von der Wurzel Ihrer Kohana-Installation.
  6. Stellen Sie sicher, dass die Verzeichnisse application/logs und application/cache beschreibbar sind. Chmod bis 666.
  7. Zeigen Sie nun mit Ihrem Browser auf http://localhost/kohana/. Das Framework ruft automatisch das Skript install.php auf und überprüft Ihre Serveranforderungen.

Kohana kann in nahezu jeder Umgebung mit minimaler Konfiguration ausgeführt werden. Es gibt einige Mindestserveranforderungen:

  • Server mit Unicode-Unterstützung
  • PHP-Version >= 5.2.3
  • Ein HTTP-Server. Ich schlage vor, Sie verwenden XAMPP. XAMPP ist ein einfaches All-in-One-Tool zur Installation von MySQL, PHP und Perl.
  • Datenbank (MsSQL, MySQL, MySQLi, PostgreSQL, PDOSqlite)

Es gibt auch einige erforderliche Erweiterungen.

  • PCRE
  • iconv
  • mcrypt
  • SPL

Wenn Ihre Installation erfolgreich abgeschlossen wurde, werden Sie zu dieser Testseite weitergeleitet:

Wenn einer der Tests fehlschlägt, müssen Sie ihn korrigieren, bevor Sie fortfahren.

Wenn alle Tests bestanden wurden, wechseln Sie in das Kohana-Verzeichnis und entfernen Sie das Skript install.php oder benennen Sie es um. Aktualisieren Sie, und Sie sehen eine Begrüßungsseite wie diese:

Schritt 4: Kohana konfigurieren

Kohana ist bereit zu gehen. Es ist keine andere Konfiguration erforderlich. Dieser Rahmen ist erstaunlich. Ist es nicht? Lassen Sie uns einen Code überprüfen. Folge mir.

Schritt 5: Ihr erstes Kohana-Projekt

Kanonische Programmier-Tutorials beginnen mit dem Beispiel "Hallo Welt". Ich denke stattdessen, dass eine einfache Anwendung Ihnen eine klare Vorstellung davon geben kann, wie das Framework funktioniert. Also werden wir einen CD-Sammlungsmanager erstellen - nur für eine lustige Demonstration. Bevor wir mit dem Codieren beginnen, ist eine kurze Einführung in das Kohana-Dateisystem erforderlich.

Unsere Anwendung wird im Anwendung-Ordner abgelegt. In diesem Ordner gibt es mehrere Unterordner, aber wir benötigen die folgenden für unser Projekt:

  • Der Konfiguration-Ordner hostet alle Konfigurationsdateien, die als einfache statische Arrays codiert sind.
  • Der Controller-Ordner enthält unsere benutzerdefinierte Controller-Klasse
  • Der Modelle-Ordner enthält unsere benutzerdefinierte Modellklasse
  • Der Ansichten-Ordner hostet unsere benutzerdefinierten Dateien, die in HTML geschrieben sind (oder eine Markup-Sprache oder ein Skript, die zum Anzeigen von Daten und Schnittstellensteuerelementen für den Benutzer erforderlich sind).

Die verbleibenden Unterordner werden für dieses Tutorial nicht benötigt. Ich lade Sie daher ein, auf der Kohana-Website mehr zu erfahren.

Der System-Ordner enthält den Kohana-Kern und die Kohana-Tools wie Bibliotheken, Helfer und vordefinierte Konfigurationsdateien. In diesem Projekt werden wir einige Bibliotheken und einige Helfer verwenden - gute Werkzeuge, um Ihre Arbeit zu beschleunigen.

Der Assets-Ordner ist kein vordefinierter Kohana-Ordner. Ich habe es für Mediendateien wie CSS, JS und Bilder erstellt. Ich zeige Ihnen, wie Sie diese Dateien in das Projekt aufnehmen können.

Im Moduln-Ordner können wiederverwendbare Sammlungen verwandter Dateien abgelegt werden, die einer Anwendung eine bestimmte Funktionalität hinzufügen. Das vom Kohana-Team bereitgestellte Authentifizierungsmoduln ist ein Beispiel für ein Modul.

Dies ist eine sehr kurze Einführung in das Kohana-Dateisystem, die jedoch für die Zwecke dieses Lernprogramms ausreicht. Ich möchte dich nicht mehr mit Theorie langweilen.

Schritt 6: Projektdatenbank

Ich habe MySQL als mein DBMS gewählt, aber denken Sie daran, dass Kohana auch MsSQL, MySQLi, PostgreSQL, PDOSqlite unterstützt. Erstellen Sie eine Datenbank mit dem Namen "cd_collection" oder wählen Sie den gewünschten Namen und führen Sie die folgende SQL über phpMyAdmin oder ein beliebiges Tool aus, um die Verwaltung von MySQL zu verwalten.

1
CREATE TABLE `albums` (
2
  `id` int(11) NOT NULL auto_increment,
3
  `name` varchar(50) collate utf8_bin NOT NULL,
4
  `author` varchar(50) collate utf8_bin NOT NULL,
5
  `genre_id` int(11) NOT NULL,
6
  PRIMARY KEY  (`id`),
7
  KEY `genre_id` (`genre_id`)
8
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=19 ;
9
10
INSERT INTO `albums` (`id`, `name`, `author`, `genre_id`) VALUES
11
(2, 'Lines, Vines And Trying Times', 'Jonas Brothers', 16),
12
(3, 'The E.N.D.', 'The Black Eyed Peas', 16),
13
(4, 'Relapse', 'Eminem', 18),
14
(5, 'Monuments And Melodies', 'Incubus', 1),
15
(6, 'Thriller', 'Michael Jackson', 16),
16
(7, 'Back in Black', 'AC/DC', 4),
17
(8, 'The Dark Side of the Moon', 'Pink Floyd', 4),
18
(9, 'Bat out of Hell', 'Meat Loaf', 4),
19
(10, 'Backstreet Boys', 'Millennium', 16),
20
(11, 'Rumours', 'Fleetwood Mac', 4),
21
(12, 'Come on Over', 'Shania Twain', 16),
22
(13, 'Led Zeppelin IV', 'Led Zeppelin', 4),
23
(14, 'Jagged Little Pill', 'Alanis Morissette', 4),
24
(15, 'Sgt. Pepper''s Lonely Hearts Club Band', 'The Beatles', 16),
25
(16, 'Falling into You', 'Céline Dion', 16),
26
(17, 'Music Box', 'Mariah Carey', 16),
27
(18, 'Born in the U.S.A.', 'Bruce Springsteen', 4);
28
29
CREATE TABLE `genres` (
30
  `id` int(11) NOT NULL auto_increment,
31
  `name` varchar(50) collate utf8_bin NOT NULL,
32
  PRIMARY KEY  (`id`),
33
  UNIQUE KEY `name` (`name`)
34
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=22 ;
35
36
INSERT INTO `genres` (`id`, `name`) VALUES
37
(1, 'Alternative Rock'),
38
(2, 'Blues'),
39
(3, 'Classical'),
40
(4, 'Rock'),
41
(5, 'Country'),
42
(6, 'Dance'),
43
(7, 'Folk'),
44
(8, 'Metal'),
45
(9, 'Hawaiian'),
46
(10, 'Imports'),
47
(11, 'Indie Music'),
48
(12, 'Jazz'),
49
(13, 'Latin'),
50
(14, 'New Age'),
51
(15, 'Opera'),
52
(16, 'Pop'),
53
(17, 'Soul'),
54
(18, 'Rap'),
55
(20, 'Soundtracks'),
56
(21, 'World Music');
57
58
ALTER TABLE `albums`
59
  ADD CONSTRAINT `genre_inter_relational_constraint` FOREIGN KEY (`genre_id`) REFERENCES `genres` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Wie Sie sehen können, erstellt SQL zwei Tabellen, Alben und Genres und füllt sie mit einigen Daten. Die letzte SQL-Anweisung fügt eine Einschränkung für den Fremdschlüssel "genre_id" hinzu.

Die Datenbankstruktur ist sehr einfach und bedarf keiner näheren Erläuterung.

Jetzt müssen Sie Kohana mitteilen, wo sich Ihre Datenbank befindet und wie Sie darauf zugreifen können. Bearbeiten Sie die globale Konfigurationsdatei system/config/database.php wie folgt

1
$config['default'] = array
2
(
3
	'benchmark'     => TRUE,
4
	'persistent'    => FALSE,
5
	'connection'    => array
6
	(
7
		'type'     => 'mysql',	
8
		'user'     => 'root',	
9
		'pass'     => 'root',	
10
		'host'     => 'localhost',	
11
		'port'     => FALSE,		
12
		'socket'   => FALSE,		
13
		'database' => 'cd_collection'
14
	),
15
	'character_set' => 'utf8',
16
	'table_prefix'  => '',
17
	'object'        => TRUE,
18
	'cache'         => FALSE,
19
	'escape'        => TRUE
20
);

Dieser Code weist Kohana an, eine Verbindung zu einer MySQL-Datenbank namens "cd_collection" auf localhost mit dem Benutzernamen "root" und dem Kennwort "root" herzustellen. Sie müssen diese Einstellungen entsprechend Ihrer Datenbankserverkonfiguration ändern.

Schritt 7: Erstellen Sie den Controller

Lassen Sie uns nun unseren ersten Controller erstellen. Denken Sie an diese Konventionen.

  • Der Dateiname des Controllers muss klein geschrieben sein, z. B. album.php
  • Die Controller-Klasse muss dem Dateinamen zugeordnet und groß geschrieben sein und muss an _Controller angehängt werden, z. B. Album_Controller
  • muss die Controller-Klasse als (Groß-) Eltern haben

Denken Sie auch daran, wie Kohana seine URLs strukturiert und wie Sie eine Controller-Methode aufrufen können. z. B. http: //hostname/kohana_directory/index.php/controller/function.

Werfen wir einen Blick auf diesen einfachen Controller.

1
<?php defined('SYSPATH') OR die('No direct access allowed.');
2
3
class Album_Controller extends Controller
4
{ 
5
	public function __construct()	
6
 	{ 
7
		parent::__construct();
8
	}
9
 	
10
	public function index()
11
 	{
12
 	  	echo "My first controller";	
13
	}
14
}

PHP5 OOP ist Voraussetzung. Wenn Sie sich nicht auskennen, können Sie hier mehr erfahren.

Die Konstruktorfunktion called __construct initialisiert die Klasse und ruft den übergeordneten Konstruktor auf.  Die Indexfunktion ist die Standardfunktion, d. h. sie wird aufgerufen, wenn wir den Controller ohne Angabe einer Funktion aufrufen (z. B. http://localhost/index.php/kohana/album. Nach dem Namenscontroller  ist keine Funktion vorhanden, es wird die Standard-Indexfunktion aufgerufen).

Konzentrieren wir uns angesichts dieser Grundregeln auf unsere Anwendung. Der Album-Controller implementiert alle Aktionen für  die Verwaltung der Alben-Sammlung. Mit diesem Controller können wir ein neues Album erstellen, um die in unserer Datenbank gespeicherten Alben anzuzeigen, um ein Album zu aktualisieren und ein Album zu löschen.

Ändern wir also die Klasse wie folgt.

Erstellen Sie eine Datei mit dem Namen album.php in application/controllers/ und fügen Sie Folgendes ein.

1
<?php defined('SYSPATH') OR die('No direct access allowed.');
2
	
3
class Album_Controller extends Controller
4
{
5
	 private $album_model; 
6
	 private $genre_model;
7
	 
8
	 private $list_view;
9
	 private $create_view;
10
	 private $update_view;
11
 
12
	public function __construct()	
13
 	{ 
14
		parent::__construct();
15
		$this->album_model   = new Album_Model;
16
		$this->genre_model  	= new Genre_Model;
17
	  	$this->list_view   	= new View('list');
18
	  	$this->update_view  	= new View('update');
19
	  	$this->create_view  	= new View('create');
20
	}
21
 
22
 	public function index()
23
 	{
24
  		$this->show_albums_list();
25
 	}
26
		
27
	private function show_albums_list()
28
	{
29
		$albums_list = $this->album_model->get_list(); 
30
		$this->list_view->set('albums_list',$albums_list);
31
		$this->list_view->render(TRUE); 
32
	}
33
	
34
 	public function show_create_editor()
35
 	{
36
 		$this->create_view->set('genres_list',$this->get_genres_list());
37
  		$this->create_view->render(TRUE);
38
 	}
39
 
40
 	public function show_update_editor($id)
41
 	{
42
		$album_data = $this->album_model->read($id);
43
		$this->update_view->set('album_id',$album_data[0]->id);
44
		$this->update_view->set('name',$album_data[0]->name);
45
		$this->update_view->set('author',$album_data[0]->author);
46
		$this->update_view->set('genre_id',$album_data[0]->genre_id);
47
		$this->update_view->set('genres_list',$this->get_genres_list());
48
		$this->update_view->render(TRUE);
49
 	}
50
 
51
 	public function create()
52
 	{ 
53
		$album_data=array(
54
		'name'    	=> $this->input->post('name'),
55
		'author'  	=> $this->input->post('author'),
56
		'genre_id'  => $this->input->post('genre_id')
57
		);
58
		$this->album_model->create($album_data);
59
		url::redirect('album');
60
 	}
61
 
62
	public function update()
63
	{ 
64
		$album_data = array(
65
			'name'    	=> $this->input->post('name'),
66
			'author'  	=> $this->input->post('author'),
67
			'genre_id'  => $this->input->post('genre_id')
68
		);
69
		$this->album_model->update($this->input->post('album_id'),$album_data);
70
  		url::redirect('album');
71
 	}
72
  
73
  	public function delete($id)
74
 	{
75
		$this->album_model->delete($id);
76
		url::redirect('album');
77
 	}
78
 
79
	private function get_genres_list()
80
	{
81
		$db_genres_list  = $this->genre_model->get_list(); 
82
		$genres_list  = array();
83
		
84
		if(sizeof($db_genres_list) >= 1)
85
		{
86
			foreach($db_genres_list as $item)
87
			{
88
				$genres_list[$item->id] = $item->name;
89
			}
90
		}
91
		return $genres_list;
92
 	}
93
}

Lassen Sie mich erklären, was dieser Code bewirkt.

Am Anfang der Klasse werden fünf Mitgliedsvariablen deklariert:

1
private $album_model; 
2
private $genre_model;
3
		 
4
private $list_view;
5
private $create_view;
6
 private $update_view;

Diese Mitglieder sind privat, da ich die Sichtbarkeit nur auf diese Klasse beschränken möchte.

In der Konstruktmethode werden die Modell- und Ansichtsobjekte mit den fünf Elementen erstellt:

1
$this->album_model   = new Album_Model;
2
$this->genre_model  	= new Genre_Model;
3
$this->list_view   	= new View('list');
4
$this->update_view  	= new View('update');
5
$this->create_view  	= new View('create');

Verwenden Sie diese Syntax, um ein Modellobjekt zu erstellen:

1
$obj_name = new Name_Model;

Verwenden Sie diese Syntax, um ein Ansichtsobjekt zu erstellen:

1
$obj_name = new View('view_filename_without_extension');

Jetzt gibt es zwei Objekte für den Zugriff auf das Album- und Genre-Modell und drei Objekte für den Zugriff auf die Ansichten, die zum Rendern der Präsentation erforderlich sind.

Die Indexmethode ruft die Methode show_albums_list auf, die alle in der Datenbank gespeicherten Alben auflistet.

1
$albums_list = $this->album_model->get_list(); 
2
$this->list_view->set('albums_list',$albums_list);
3
$this->list_view->render(TRUE);

In dieser Methode können Sie sehen, wie das Modell und das Ansichtsobjekt für den Zugriff auf relative Methoden verwendet werden. "get_list" ist eine Modellmethode (wir werden sie später sehen), die alle in der Datenbank gespeicherten Alben zurückgibt. Das Ergebnis wird im Array "$album_list" gespeichert. Um das Ergebnisarray vom Controller an die Ansicht zu übergeben, wird die Methode "set" für das Ansichtsobjekt aufgerufen. Diese Methode erfordert zwei Parameter: eine neue leere Variable(album_list), die Daten einer vorhandenen Variablen enthält ($album_list). Jetzt enthält die neue Variable "album_list" das Array $album_list (wir werden später sehen, wie der Inhalt in der Ansicht angezeigt wird). Die Methode "render" mit dem Parameter TRUE ist erforderlich, um Daten an den Browser auszugeben.

Die Methode show_create_editor zeigt die Benutzeroberfläche zum Einfügen eines neuen Albums.

1
$this->create_view->set('genres_list',$this->get_genres_list());
2
$this->create_view->render(TRUE);

Die Liste der Genres wird an die Ansicht übergeben.

Die Methode show_update_editor zeigt die Benutzeroberfläche zum Aktualisieren eines vorhandenen Albums.

1
$album_data = $this->album_model->read($id);
2
$this->update_view->set('album_id',$album_data[0]->id);
3
$this->update_view->set('name',$album_data[0]->name);
4
$this->update_view->set('author',$album_data[0]->author);
5
$this->update_view->set('genre_id',$album_data[0]->genre_id);
6
$this->update_view->set('genres_list',$this->get_genres_list());
7
$this->update_view->render(TRUE);

"read" ist eine Modellmethode (wir werden sie später sehen), die Daten ($album_data) des Albums mit einer ID gleich $id zurückgibt. Anschließend wird jedes einzelne Element des zurückgegebenen Datenalbums an die Ansicht übergeben.

Die Methode create empfängt Daten für ein neues Album aus der Ansicht und die Daten werden in der Datenbank gespeichert.

1
		$album_data=array(
2
		'name'    	=> $this->input->post('name'),
3
		'author'  	=> $this->input->post('author'),
4
		'genre_id'  => $this->input->post('genre_id')
5
		);
6
		$this->album_model->create($album_data);
7
		url::redirect('album');

$album_data ist ein Array, das die POST-Daten aus der Ansicht enthält. Um das Album zu speichern, wird das Array an die Methode create model übergeben. Die letzte Zeile ist ein Aufruf einer Hilfsmethode. Helfer sind einfach Funktionen, die Sie bei der Entwicklung unterstützen. Die Hilfsklassen werden automatisch vom Framework geladen. Helfer werden als statische Methoden einer Klasse deklariert, sodass die Klasse nicht instanziiert werden muss. In diesem Fall wird die Methode "Redirect" der Helfer "URL" aufgerufen und weist Kohana an, den Browser zum Album-Controller umzuleiten. Dadurch wird ein neuer Einsatz vermieden (z. B. Drücken von F5).

"Helfer sind einfach Funktionen, die Sie bei der Entwicklung unterstützen."

Die Aktualisierungs- und Löschmethoden funktionieren auf die gleiche Weise wie die oben beschriebene Erstellungsmethode.

Die letzte Methode get_genres_list ruft die Genre-Liste aus dem Modell ab ($db_genres_list) und erstellt ein neues Array ($genres_list) für das Auswahlfeld in den Ansichten.

1
		$db_genres_list  = $this->genre_model->get_list(); 
2
		$genres_list  = array();
3
		
4
		if(sizeof($db_genres_list) >= 1)
5
		{
6
			foreach($db_genres_list as $item)
7
			{
8
				$genres_list[$item->id] = $item->name;
9
			}
10
		}
11
		return $genres_list;

Schritt 8: Projektmodell erstellen

Lassen Sie uns nun Modelle für unsere Webanwendung erstellen. Denken Sie an diese Konventionen.

  • der Dateiname des Modells muss klein geschrieben sein, z. B. album.php
  • die Modellklasse muss dem Dateinamen zugeordnet und großgeschrieben werden und muss mit _Model, z. B. Album_Model
  • muss die Modellklasse als (Groß-) Elternteil haben

Hier ist der Modellcode des Albums. Erstellen Sie eine Datei mit dem Namen album.php in application/models/ und fügen Sie den folgenden Code ein.

1
<?php defined('SYSPATH') OR die('No direct access allowed.');
2
3
class Album_Model extends Model
4
{
5
 	private $album_table;
6
 	private $genre_table; 
7
 
8
  	public function __construct()
9
    	{
10
      		parent::__construct();
11
  		$this->album_table = 'albums';
12
		$this->genre_table = 'genres';
13
  	}
14
  
15
  	public function read($id)
16
  	{
17
		$this->db->where('id', $id);
18
		$query = $this->db->get($this->album_table); 
19
  		return $query->result_array();
20
 	}
21
  	
22
	public function delete($id)
23
  	{
24
		$this->db->delete($this->album_table, array('id' => $id));
25
  	}
26
  
27
  	public function update($id,$data)
28
  	{
29
		$this->db->update($this->album_table, $data, array('id' => $id));
30
  	}
31
  	
32
	public function create($data)
33
  	{
34
   		$this->db->insert($this->album_table, $data);
35
  	}
36
 	
37
	public function get_list()
38
 	{
39
  		$this->db->select('albums.id as id,albums.name as name,albums.author as author, genres.name as genre');  
40
  		$this->db->from($this->album_table);  
41
  		$this->db->join($this->genre_table,'genres.id','albums.genre_id');
42
  		$query = $this->db->get();
43
  		return $query->result_array();
44
	}
45
}

Alle Methoden in den Modellen verwenden die Syntax des Abfrage-Generators. Dieses Kohana-Tool beschleunigt die Datenbankentwicklungszeiten und vereinfacht die Erstellung von Abfragen.

Am Anfang der Klasse werden zwei Mitgliedsvariablen deklariert:

1
			private $album_table;
2
			private $genre_table;

Diese Mitglieder sind privat, da ich die Sichtbarkeit nur auf diese Klasse beschränken möchte. Sie sind die Container für die Namen der Datenbanktabellen.

Die erste Zeile in der Konstruktormethode lädt die Kohana-Datenbankbibliothek in $this->db. In der zweiten und dritten Zeile werden die beiden Klassenmitglieder initialisiert.

1
parent::__construct();
2
$this->album_table = 'albums';
3
$this->genre_table = 'genres';

Die Abfrage in der Lesemethode ruft Albumdatensätze ab, die eine bestimmte Kennung ("$id") haben.

1
			$this->db->where('id', $id);
2
		 	$query = $this->db->get($this->album_table); 
3
	  	 	return $query->result_array();

Die Abfrage in der Löschmethode löscht die Albumtabellenzeile mit einem bestimmten Bezeichner ("$id").

1
$this->db->delete($this->album_table, array('id' => $id));

Die Abfrage in der Aktualisierungsmethode aktualisiert die Albumtabellenzeile mit einem bestimmten Bezeichner ("$id") mit neuen Werten aus dem Array "$data".

1
$this->db->update($this->album_table, $data, array('id' => $id));

Das Array "$data" muss Datensatznamen als Schlüssel des Arrays und Werte als Werte des Arrays enthalten. Das Array "$data" muss folgende Form haben:

1
$data = array(
2
	'name' 			=> 	'album_name',
3
	'author'		=>	'author_name',
4
	'genre_id'		=>	'genre_id'	
5
	);

Die Abfrage in der Methode create fügt einen neuen Datensatz mit Werten des Arrays "$data" ein.

1
$this->db->insert($this->album_table, $data);

Das Array "$data" muss folgende Form haben:

1
$data = array(
2
	'id'			=>	'album_id',
3
	'name' 			=> 	'album_name',
4
	'author'		=>	'author_name',
5
	'genre_id'		=>	'genre_id'	
6
);

Die Abfrage in der Methode get_list ruft alle Albumzeilen ab.

1
		$this->db->select('albums.id as id,albums.name as name,albums.author as author, genres.name as genre');  
2
		$this->db->from($this->album_table);  
3
		$this->db->join($this->genre_table,'genres.id','albums.genre_id');
4
		$query = $this->db->get();
5
		return $query->result_array();

Nun das Genre-Modell. Erstellen Sie eine Datei mit dem Namen genre.php in application/models/ und fügen Sie den Code darunter ein:

1
	<?php defined('SYSPATH') OR die('No direct access allowed.');
2
3
	class Genre_Model extends Model
4
	{
5
		private $genre_table;
6
	
7
		function __construct()
8
		{
9
			parent::__construct();
10
			$this->genre_table = 'genres';
11
		}
12
	
13
		function get_list()
14
		{
15
			$query = $this->db->get($this->genre_table);
16
			return  $query->result_array();		
17
		}
18
	}

Dieses Modell ist sehr einfach, daher werde ich keine Zeit mehr verlieren, um es zu kommentieren. Die Modelle und der Controller sind einsatzbereit. Lassen Sie uns nun an den Ansichten arbeiten.

Schritt 9: Erstellen Sie die Projektansicht

Ansichten sind Dateien, die die Präsentationsebene für Ihre Anwendung enthalten. Der Zweck besteht darin, diese Informationen von Ihrer Anwendungslogik zu trennen, um die Wiederverwendbarkeit und den saubereren Code zu vereinfachen. Für dieses Projekt sind drei Ansichten erforderlich: eine Ansicht zum Auflisten der Albumsammlung, eine Ansicht zum Erstellen eines neuen Albums und eine Ansicht zum Bearbeiten eines vorhandenen Albums.

Erstellen Sie eine Datei mit dem Namen list.php in application/views/ und fügen Sie den folgenden Code ein:

1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
<html>
3
<head>
4
<?php
5
	echo html::stylesheet(array
6
		(
7
		 'assets/css/style'
8
		),
9
		array
10
		(
11
		 'screen'
12
		), FALSE);
13
?>
14
		<title>CD COLLECTION</title>
15
		</head>
16
		<body>
17
		<?php 
18
				echo html::image('assets/images/add.png');
19
				echo html::anchor('album/show_create_editor', 'Add new album'); 
20
		?>
21
		<table class="list" cellspacing="0">
22
		<tr>
23
			<td colspan="5" class="list_title">CD Collection</td>
24
		</tr>	
25
		<tr>
26
			<td class="headers">Album name</td>
27
			<td class="headers">Author</td>
28
			<td colspan='3' class="headers">Genre</td>
29
		
30
		</tr>	
31
		<?php
32
			foreach($albums_list as $item)
33
			{
34
				echo "<tr>";
35
				echo "<td class='item'>".$item->name."</td>";
36
				echo "<td class='item'>".$item->author."</td>";
37
				echo "<td class='item'>".$item->genre."</td>";
38
				echo "<td class='item'>".html::anchor('album/delete/'.$item->id,html::image('assets/images/delete.png'))."</td>";		
39
				echo "<td class='item'>".html::anchor('album/show_update_editor/'.$item->id,html::image('assets/images/edit.png'))."</td>";		
40
				echo "</tr>";
41
			}
42
		?>
43
		</table>
44
		</body>
45
		</html>

Diese Ansicht zeigt eine HTML-Seite mit einer Liste aller Alben. Diese Liste wurde mit einer foreach-Schleife erstellt, die die Informationen in einer HTML-Tabelle druckt. Für jede Albumzeile gibt es zwei Bilder: ein "rotes Kreuz" und ein "Taschenbuch". Sie verknüpfen jeweils die Controller-Löschmethode und die Aktualisierungsmethode. Beide übergeben die Album-ID über eine Get-Anfrage an den Album-Controller. Über der Liste befindet sich eine Schaltfläche zum Erstellen neuer Alben. In diesem Code verwenden wir auch einen von Kohana bereitgestellten HTML-Helfer, der den Vorgang zum Schreiben von HTML-Seiten beschleunigt.

Lassen Sie uns nun eine Datei mit dem Namen create.php in application/views/ erstellen.

1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
<html>
3
<head>
4
<?php
5
	echo html::stylesheet(array
6
	(
7
	    'assets/css/style'
8
	),
9
	array
10
	(
11
	    'screen'
12
	), FALSE);
13
?>
14
<title>CD COLLECTION</title>
15
</head>
16
<body>
17
<?php echo form::open('album/create'); ?>
18
<table class='editor'>
19
<tr>
20
	<td colspan='2' class='editor_title'>Create new album</td>
21
</tr>
22
<?php
23
	echo "<tr>";
24
	echo "<td>".form::label('name', 'Name: ')."</td>";
25
	echo "<td>".form::input('name', '')."</td>";
26
	echo "</tr>";
27
	
28
	echo "<tr>";
29
	echo "<td>".form::label('author', 'Author: ')."</td>";	
30
	echo "<td>".form::input('author', '')."</td>";	
31
	echo "<tr/>";
32
	
33
	echo "<tr>";
34
	echo "<td>".form::label('genre', 'Genre: ')."</td>";	
35
	echo "<td>".form::dropdown('genre_id',$genres_list)."</td>";
36
	echo "<tr/>";
37
	
38
	echo "<tr>";
39
	echo "<td colspan='2' align='left'>".form::submit('submit', 'Create album')."</td>";
40
	echo "</tr>";
41
?>
42
</table>
43
<?php echo form::close(); ?>
44
</body>
45
</html>

Das letzte aber nicht das letzte ist die Update-Ansicht. Erstellen wir eine Datei mit dem Namen update.php in application/views/.

1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
<html>
3
<head>
4
<?php
5
	echo html::stylesheet(array
6
	(
7
	    'assets/css/style'
8
	),
9
	array
10
	(
11
	    'screen'
12
	), FALSE);
13
?>
14
<title>CD COLLECTION</title>
15
</head>
16
<body>
17
<?php echo form::open('album/update'); ?>
18
<table class='editor'>
19
<tr>
20
	<td colspan='2' class='editor_title'>Update album</td>
21
</tr>
22
<?php
23
	echo "<tr>";
24
	echo "<td>".form::label('name', 'Name: ')."</td>";
25
	echo "<td>".form::input('name', $name)."</td>";
26
	echo "</tr>";
27
	
28
	echo "<tr>";
29
	echo "<td>".form::label('author', 'Author: ')."</td>";	
30
	echo "<td>".form::input('author', $author)."</td>";	
31
	echo "<tr/>";
32
	
33
	echo "<tr>";
34
	echo "<td>".form::label('genre', 'Genre: ')."</td>";	
35
	echo "<td>".form::dropdown('genre_id',$genres_list, $genre_id)."</td>";
36
	echo "<tr/>";
37
	
38
	echo "<tr>";
39
	echo "<td colspan='2' align='left'>".form::submit('submit', 'Update album')."</td>";
40
	echo "</tr>";
41
	
42
?>
43
</table>
44
<?php 
45
	echo form::hidden('album_id',$album_id);
46
	echo form::close(); 
47
?>
48
</body>
49
</html>

Der erste ist ein einfacher Editor, mit dem der Benutzer Informationen zu einem neuen Album einfügen kann. Die Felder wie Autor und Name werden über eine HTML-Eingabe und das Genre über ein  Kombinationsfeld eingefügt. Sobald der Benutzer auf die Schaltfläche "Erstellen" klickt, werden alle Informationen als  POST-Anfrage an die Methode "Erstellen/Aktualisieren" im Album-Controller übergeben. Wenn die Steuerung diese gebuchten  Variablen erhält, ruft sie das Modell auf, das ein neues Album in die Datenbank einfügt. Die Formulare verwenden in beiden Ansichten den Kohana-Formularhelfer.

Erstellen Sie den Assets-Ordner im Kohana-Stammverzeichnis auf derselben Ebene wie der Anwendungsordner, um unserer Anwendung einen gewissen Stil zu verleihen. Öffnen Sie es jetzt und erstellen Sie zwei neue Ordner: CSS und Bilder.

Erstellen Sie im CSS-Ordner eine neue Datei mit dem Namen style.css und fügen Sie diese ein:

1
a {
2
	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
3
	font-weight: normal;
4
	font-size: 12px;
5
	color: #00F;
6
	vertical-align:text-top;
7
}
8
9
img {
10
	border: 0;
11
}
12
13
label {
14
	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
15
	font-weight: normal;
16
	font-size: 12px;
17
}
18
19
input {
20
	border: 1px solid #000;
21
}
22
23
select {
24
	width:185px;
25
}
26
27
table.editor
28
{
29
	text-align: center;
30
	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
31
	font-weight: normal;
32
	font-size: 11px;
33
	color: #fff;
34
	width: 280px;
35
	background-color: #666;
36
	border: 0px;
37
	border-collapse: collapse;
38
	border-spacing: 0px;
39
}
40
41
table.editor td.editor_title
42
{
43
	background-color: #666;
44
	color: #fff;
45
	padding: 4px;
46
	text-align: left;
47
	font-weight: bold;
48
	font-size: 16px;
49
} 
50
51
table.editor td
52
{
53
	padding: 4px;
54
} 
55
56
table.list
57
{
58
	text-align: center;
59
	font-family: Verdana, Geneva, Arial, Helvetica, sans-serif ;
60
	font-weight: normal;
61
	font-size: 11px;
62
	color: #fff;
63
	width: 280px;
64
	background-color: #666;
65
	border: 0px;
66
	border-collapse: collapse;
67
	border-spacing: 0px;
68
}
69
70
table.list td.item
71
{
72
	background-color: #CCC;
73
	color: #000;
74
	padding: 4px;
75
	text-align: left;
76
	border: 1px #fff solid;
77
}
78
79
table.list td.list_title,table.list td.headers
80
{
81
	background-color: #666;
82
	color: #fff;
83
	padding: 4px;
84
	text-align: left;
85
	border-bottom: 2px #fff solid;
86
	font-weight: bold;
87
} 
88
89
table.list td.list_title
90
{
91
	font-size: 16px;
92
} 
93
94
table.list td.headers
95
{
96
	font-size: 12px;
97
}

Kopieren Sie nun die folgenden Bilder in den Bilder-Ordner:

Das ist alles. Zeigen Sie mit Ihrem Browser auf http://localhost/kohana/index.php/album, und Sie sollten etwas Ähnliches sehen:

Wenn Sie versuchen, ein neues Album zu erstellen oder ein vorhandenes zu bearbeiten, sollten Sie etwas Ähnliches sehen:

Schritt 10: Letzte Gedanken

Natürlich sind für diese Anwendung einige Verbesserungen erforderlich, aber mit einer kleinen Menge Code haben Sie eine kleine Webanwendung erstellt. Jetzt wissen Sie, wie Sie das MVC-Muster mit Kohana verwenden und wie Sie Datenbankbibliotheken und Helfer verwenden. Weitere Informationen finden Sie in der offiziellen Dokumentation.

Dank Kohana ist die Code-Wartung eine einfache Aufgabe, und das Hinzufügen neuer Funktionen ist ein Kinderspiel. Ich hoffe, Ihnen hat dieses Tutorial gefallen. Bleiben Sie dran, um mehr über Kohana zu erfahren.

  • Folgen Sie uns auf Twitter oder abonnieren Sie den NETTUTS RSS-Feed, um weitere tägliche Tipps und Artikel zur Webentwicklung zu erhalten.
Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.