{"id":492,"date":"2015-02-27T11:00:14","date_gmt":"2015-02-27T11:00:14","guid":{"rendered":"https:\/\/anexia.com\/blog\/?p=492"},"modified":"2022-04-19T14:09:52","modified_gmt":"2022-04-19T12:09:52","slug":"schnelleinstieg-ins-codeigniter-framework","status":"publish","type":"post","link":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/","title":{"rendered":"Schnelleinstieg ins CodeIgniter-Framework"},"content":{"rendered":"<p><strong>Was ist CodeIgniter?\u00a0<\/strong>Bei CodeIgniter handelt es sich um ein in PHP geschriebenes quelloffenes Webframework (Open-Software License 3.0), welches sich gro\u00dfer Beliebtheit insbesondere im amerikanischen Raum erfreut.<\/p>\n<p><!--more--><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-504 size-medium\" src=\"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/codeigniter_logo-300x70.png\" alt=\"codeigniter_logo\" width=\"300\" height=\"70\" srcset=\"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/codeigniter_logo-300x70.png 300w, https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/codeigniter_logo-600x140.png 600w, https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/codeigniter_logo-1024x239.png 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Entwickelt wurde dieses von der im US-Bundesstaat Oregon liegenden Softwareentwicklungsfirma EllisLab. Das erste \u00f6ffentliche Release des Frameworks wurde am 28. Februar 2006 herausgegeben.<\/p>\n<p>CodeIgniter wirbt vor allem damit, im Vergleich mit anderen Webframeworks wesentlich schneller und effizienter zu sein. Die Entwicklungszeiten von neuer <a href=\"https:\/\/anexia.com\/de\/softwareentwicklung\/webentwicklung\/\">Software und Web-Anwendungen<\/a> verk\u00fcrzen sich dadurch erheblich.<\/p>\n<p>In einer kritischen Sicht auf PHP-Frameworks im Allgemeinen erw\u00e4hnte der PHP-Sch\u00f6pfer Rasmus Nerdorf auf der <a href=\"https:\/\/www.froscon.de\/\" target=\"_blank\" rel=\"noopener\">FrOSCon <\/a>im August 2008, dass ihm CodeIgniter gefalle, da es \u201eschneller, schlanker und am wenigsten wie ein Framework ist\u201c (Originaltext: \u201e[\u2026] because it is faster, lighter and the least like a framework [\u2026]\u201c).<\/p>\n<p>Allerdings konnte es das Entwicklerteam von EllisLab in der letzten Zeit nicht mehr die notwendigen Ressourcen aufbringen, welche f\u00fcr eine Weiterentwicklung notwendig gewesen w\u00e4ren. Am 9. Juli 2013 schlie\u00dflich ver\u00f6ffentlichte EllisLab einen Blogartikel, in dem sie bekanntgeben, dass ab nun ein neues \u201eZuhause\u201c f\u00fcr das CodeIgniter-Framework gesucht werde.<\/p>\n<p>Das letzte Stable-Release (Version 2.2.0) wurde am 5. Juni 2014 herausgegeben. Diese Version ist momentan auch die aktuellste.<\/p>\n<p>Am 6. Oktober 2014 wurde schlie\u00dflich bekannt, dass das \u201eBritish Columbia Institute of Technology\u201c, kurz \u201eBCIT\u201c, aus Vancouver (Kanada) das Projekt vollst\u00e4ndig \u00fcbernommen hat.<\/p>\n<p>Der Quellcode steht auf GitHub unter der MIT-Lizenz zur Verf\u00fcgung, wo aktuell tatkr\u00e4ftig an der Version 3.0 gearbeitet wird.<\/p>\n<p>&nbsp;<\/p>\n<h2>Aufbau und Struktur<\/h2>\n<p>Dadurch, dass CodeIgniter bewusst m\u00f6glichst schlank gehalten wurde, zeichnet sich das Framework im Vergleich zu anderen vor allem durch eine hohe Performance, und analog dazu einer verh\u00e4ltnism\u00e4\u00dfig kurzen Einarbeitungszeit aus.<\/p>\n<p>Um den Code \u00fcbersichtlich und leicht wartbar zu machen, macht sich CodeIgniter die Model-View-Controller-Architektur, kurz \u201eMVC\u201c, zu Nutze.<\/p>\n<p>Der Grundgedanke hinter MVC ist jener, dass man Programmcode und Design strikt voneinander trennen m\u00f6chte, sodass die Software im Allgemeinen modularer wird. So k\u00f6nnen beispielsweise Backend-Entwickler sich um die programmiertechnische Logik und Frontend-Designer sich um das Layout und die einzelnen grafischen Komponenten k\u00fcmmern. Diese parallele Arbeitsweise tr\u00e4gt auch ma\u00dfgeblich an der raschen Entwicklungszeit der Software bei.<\/p>\n<p>CodeIgniter hat standardm\u00e4\u00dfig ein umfangreiches Paket von Bibliotheken und diversen Hilfsfunktionen an Board, um dem Entwickler h\u00e4ufig genutzte Funktionen, angefangen bei der Datenbankkommunikation, \u00fcber die Eingabevalidierung bis hin zur Implementierung eines Warenkorb-Systems, abzunehmen.<\/p>\n<p>Besonders hervorzuheben ist hierbei auch die einfache Konfiguration. In den meisten F\u00e4llen reicht es vollkommen aus, nur eine Datenbankverbindung und ggf. eine Basis-URL zu hinterlegen.<\/p>\n<p>&nbsp;<\/p>\n<h2>Von der Theorie zur Praxis &#8211; ein Beispiel<\/h2>\n<p>Um euch einen kleinen Einblick in die Softwareentwicklung auf Basis des CodeIgniter-Frameworks zu geben, werde ich euch die Basisfunktionen anhand eines kleinen und stark vereinfachten Beispielprojekts zeigen.<\/p>\n<p>Ich werde hierf\u00fcr eine kleine Jobb\u00f6rse nachbauen, wo man Stellenangebote eintragen kann, und diese dann in einer Liste angezeigt bekommt. Mit einem Klick auf das Angebot gelangt man dann zur Detailansicht. Bei Bedarf kann dieses dann auch wieder gel\u00f6scht werden.<\/p>\n<p>Als erstes m\u00fcssen wir uns das Framework von der Homepage oder direkt von GitHub herunterladen. Ich verwende hier die aktuelle Stable-Version 2.2.0 (hier \u201eCodeIgniter-2.2.0.tar.gz\u201c).<\/p>\n<p>Anschlie\u00dfend entpacken wir den Inhalt und kopieren alle Verzeichnisse und Dateien in einen neuen Ordner auf dem Entwicklungsserver (z.B. XAMPP, WAMP, LAMP\u2026). Ich nenne diesen Ordner hier einfach \u201eci-demo\u201c.<\/p>\n<p>Nun k\u00f6nnen wir auch sofort testen, ob die CodeIgniter-Installation funktioniert \u2013 daf\u00fcr rufen wir unser Demo-Setup via http:\/\/localhost\/ci-demo auf. Es sollte nun die Willkommensseite zu sehen sein (\u201eWelcome to CodeIgniter\u201c).<\/p>\n<p>Theoretisch k\u00f6nnten wir auch sofort mit dem Entwickeln loslegen, allerdings empfehle ich, vorher noch die offizielle Layout-Bibliothek zu integrieren. Diese wird uns sp\u00e4ter einiges an Arbeit ersparen und gleichzeitig den Code noch \u00fcbersichtlicher gestalten.<\/p>\n<p>Dazu gehen wir wie folgt vor: auf der <a href=\"https:\/\/github.com\/bcit-ci\/CodeIgniter\/wiki\/layout-library\" target=\"_blank\" rel=\"noopener\">GitHub-Wiki-Seite<\/a> befindet sich bereits der notwendige PHP-Code. Wir erstellen hierf\u00fcr eine neue Datei namens \u201e<strong>layout.php<\/strong>\u201c und kopieren den Sourcecode hinein. Diese speichern wir dann unter <strong>\/application\/libraries<\/strong> ab.<\/p>\n<p>Als n\u00e4chsten Schritt konfigurieren wir CodeIgniter so, dass diese Bibliothek standardm\u00e4\u00dfig immer geladen werden soll. Dazu \u00f6ffnen wir die Datei <strong>\/application\/config\/autoload.php<\/strong> und suchen nach folgendem Ausdruck:<\/p>\n<pre class=\"lang:php decode:true \">$autoload['libraries'] = array();<\/pre>\n<p>Diesem Array f\u00fcgen wir nun die Bibliotheken f\u00fcr das Layout und die Datenbank hinzu, sodass es schlie\u00dflich wie folgt aussieht:<\/p>\n<pre class=\"lang:php decode:true \">$autoload['libraries'] = array('database', 'layout');<\/pre>\n<p>Damit wir sp\u00e4ter auch einige Hilfsfunktionen nutzen k\u00f6nnen, laden wir auch den URL- und den Form-Helper:<\/p>\n<pre class=\"lang:php decode:true \">$autoload['helper'] = array('url', 'form');<\/pre>\n<p>Unter <strong>\/application\/views<\/strong> erstellen wir eine neue Datei \u201e<strong>layout_main.php<\/strong>\u201c (dies ist das Standard-Layout, welches von der Layout-Bibliothek initialisiert wird). Hier hinein schreiben wir unser HTML-Grundger\u00fcst. Wichtig ist hier, dass wir an jener Stelle, wo wir die View-spezifischen Inhalte anzeigen m\u00f6chten die PHP-Variable <strong>$content_for_layout<\/strong> ausgeben!<\/p>\n<pre class=\"lang:php decode:true\">&lt;html&gt;\r\n\t&lt;head&gt;\r\n\t\t&lt;title&gt;CodeIgniter Demo&lt;\/title&gt;\r\n\t&lt;\/head&gt;\r\n\t&lt;body&gt;\r\n\t\t&lt;div id=\"header\"&gt;\r\n\t\t\t&lt;h1&gt;CodeIgniter Demo&lt;\/h1&gt;\r\n\t\t\t&lt;hr \/&gt;\r\n\t\t&lt;\/div&gt;\r\n\r\n\t\t&lt;div id=\"main\"&gt;\r\n\t\t\t&lt;?php echo $content_for_layout; ?&gt;\r\n\t\t&lt;\/div&gt;\r\n\r\n\t\t&lt;div id=\"footer\"&gt;\r\n\t\t\t&lt;hr \/&gt;\r\n\t\t\tFooter...\r\n\t\t&lt;\/div&gt;\r\n\t&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>Damit wir sch\u00f6ne \u201eSpeaking-URLs\u201c ohne dem \u201eindex.php\u201c dazwischen haben, erstellen wir uns im Root-Verzeichnis von CodeIgniter eine neue Datei \u201e<strong>.htaccess<\/strong>\u201c (Apache als Webserver vorausgesetzt!) und schreiben hier Folgendes hinein:<\/p>\n<pre class=\"lang:default decode:true \">RewriteEngine on\r\nRewriteRule .* index.php<\/pre>\n<p>Jetzt haben wir uns alle Grundvoraussetzungen geschaffen, damit es mit dem eigentlichen Entwickeln losgehen kann.<\/p>\n<p>Da wir hier eine Art \u201eJobb\u00f6rse\u201c nachbauen wollen, m\u00fcssen wir als erstes einen neuen Controller anlegen. Ich nenne diesen hier \u201eJobs\u201c, und lege dementsprechend eine neue Datei \u201e<strong>jobs.php<\/strong>\u201c unter <strong>\/application\/controllers<\/strong> an.<\/p>\n<pre class=\"lang:php decode:true \">class Jobs extends CI_Controller {\r\n\t\r\n\tpublic function index()\r\n\t{\r\n\t\t$this-&gt;load-&gt;view('\/jobs\/index');\r\n\t}\r\n}\r\n<\/pre>\n<p>Da wir hier unsere Layout-Bibliothek verwenden m\u00f6chten, muss das Laden der View geringf\u00fcgig angepasst werden. Dazu \u00e4ndern wir die folgende Zeile von<\/p>\n<pre class=\"lang:php decode:true \">$this-&gt;load-&gt;view('\/jobs\/index');<\/pre>\n<p>auf<\/p>\n<pre class=\"lang:php decode:true \">$this-&gt;layout-&gt;view('\/jobs\/index');<\/pre>\n<p>um. Dadurch haben wir den Vorteil, dass wir nicht in jeder Action des Controllers immer zuerst das Layout des Headers, dann den eigentlichen Inhalt, und schlie\u00dflich das Layout f\u00fcr den Footer laden m\u00fcssen \u2013 diese Arbeit \u00fcbernimmt nun die Layout-Bibliothek f\u00fcr uns, sodass wir uns voll und ganz auf den eigentlichen Inhalt konzentrieren k\u00f6nnen.<\/p>\n<p>Als n\u00e4chstes legen wir unsere View an. Dazu erstellen wir unter <strong>\/application\/views<\/strong> einen neuen Ordner \u201e<strong>jobs<\/strong>\u201c und legen in diesem die Datei \u201eindex.php\u201c an. Dies ist nicht zwingend erforderlich, f\u00f6rdert aber die \u00dcbersichtlichkeit bei mehreren Controllern.<\/p>\n<p>Die Index-Action werden wir sp\u00e4ter f\u00fcr die Auflistung der Jobs verwenden. Damit wir auch Stellenangebote anlegen, ansehen und l\u00f6schen k\u00f6nnen, erstellen wir uns nach dem gleichen Prinzip noch den Actions \u201eadd\u201c, \u201eview\u201c und \u201edelete\u201c (hier keine View notwendig).<\/p>\n<p>Der Jobs-Controller sieht nun also folgenderma\u00dfen aus:<\/p>\n<pre class=\"lang:php decode:true\">class Jobs extends CI_Controller {\r\n\t\r\n\tpublic function index()\r\n\t{\r\n\t\t$this-&gt;layout-&gt;view('\/jobs\/index');\r\n\t}\r\n\r\n\tpublic function add()\r\n\t{\r\n\t\t$this-&gt;layout-&gt;view('\/jobs\/add');\r\n\t}\r\n\r\n\tpublic function delete(){ }\r\n\r\n\tpublic function view()\r\n\t{\r\n\t\t$this-&gt;layout-&gt;view('\/jobs\/view');\r\n\t}\r\n}\r\n<\/pre>\n<p>Da wir nun mit der Grundstruktur fertig sind, wird es Zeit eine Verbindung zur Datenbank herzustellen. Daf\u00fcr erstellen wir uns eine neue MySQL-Tabelle namens \u201ejobs\u201c:<\/p>\n<pre class=\"lang:mysql decode:true\">CREATE TABLE IF NOT EXISTS `jobs` (\r\n\t`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,\r\n\t`title` varchar(255) NOT NULL,\r\n\t`company` varchar(255) NOT NULL,\r\n\t`description` text NOT NULL\r\n);\r\n<\/pre>\n<p>In der Konfigurationsdatei des Datenbank-Treibers unter <strong>\/application\/config\/database.php<\/strong> tragen wir nun die Zugangsdaten des MySQL-Servers und den Namen der Datenbank ein.<\/p>\n<p>Damit wir nun vom Controller aus auf die Datenbank zugreifen k\u00f6nnen, brauchen wir ein sogenanntes \u201eModel\u201c. Dieses wird uns Methoden zur Verf\u00fcgung stellen, welche wir vom Controller sp\u00e4ter aufrufen werden, um so an Daten der Datenbank zu gelangen.<\/p>\n<p>Das ORM von CodeIgniter folgt dem typischen \u201eActiveRecord\u201c-Muster. Anstatt die SQL-Statements direkt zu schreiben, verwenden wir hier fertige Funktionen, die wir aufrufen. Wir erhalten dadurch eine Abstraktion und sind so unabh\u00e4ngig vom Datenbanktreiber. Das ORM generiert die Statements dann dynamisch und liefert die Antworten der Datenbank als Objekt wieder retour.<\/p>\n<p>F\u00fcr unser Jobb\u00f6rse-Model erstellen wir unter <strong>\/application\/models<\/strong> eine neue Datei \u201e<strong>jobs_model.php<\/strong>\u201c und definieren hier unsere Methoden. Eine soll alle Eintr\u00e4ge der Tabelle zur\u00fcckliefern, eine andere nur einen einzelnen (\u00fcber die ID), und schlie\u00dflich jeweils eine zum Hinzuf\u00fcgen und L\u00f6schen eines Eintrags.<\/p>\n<pre class=\"lang:php decode:true \">class Jobs_model extends CI_Model {\r\n\r\n\tprotected $table = 'jobs';\r\n\t\r\n\t\/\/ returns all job offers\r\n\tpublic function getAll()\r\n\t{\r\n\t\t$result = $this-&gt;db-&gt;get( $this-&gt;table )-&gt;result_object();\t\r\n\t\treturn $result;\r\n\t}\r\n\t\r\n\t\/\/ looks for job offer by id\r\n\tpublic function getById($id)\r\n\t{\r\n\t\t$this-&gt;db-&gt;select('*')\r\n\t\t\t\t-&gt;from( $this-&gt;table )\r\n\t\t\t\t-&gt;where('id', (int) $id);\r\n\t\t\t\t\r\n\t\t$result = $this-&gt;db-&gt;get()-&gt;row_object();\r\n\t\t\r\n\t\treturn $result;\r\n\t}\r\n\r\n\t\/\/ add job offer\r\n\tpublic function add(array $data)\r\n\t{\r\n\t\treturn $this-&gt;db-&gt;insert( $this-&gt;table, $data);\r\n\t}\r\n\r\n\t\/\/ deletes job offer\r\n\tpublic function delete($id)\r\n\t{\r\n\t\t$this-&gt;db-&gt;delete( $this-&gt;table, array('id' =&gt; (int) $id));\r\n\t}\r\n}\r\n<\/pre>\n<address>Info: <strong>result_object()<\/strong> liefert ein Array mit mehreren Datens\u00e4tzen (als Objekte), <strong>row_object()<\/strong> hingegen nur das geforderte Objekt. Alternativ zur Objekt-Ausgabe stehen auch die Array-Ausgaben via <strong>result_array()<\/strong> und <strong>row_array()<\/strong> zur Verf\u00fcgung.<\/address>\n<p>Im Jobs-Controller laden wir nun dieses Model, indem wir die Initialisierung gleich \u00fcber den Konstruktor erfolgen lassen. Daf\u00fcr erg\u00e4nzen wir den Controller um Folgendes:<\/p>\n<pre class=\"lang:php decode:true \">public function __construct()\r\n{\r\n\tparent::__construct();\r\n\t$this-&gt;load-&gt;model('jobs_model');\r\n}\r\n<\/pre>\n<p>Das Jobs-Model steht uns ab sofort via <strong>$this-&gt;jobs_model<\/strong> zur Verf\u00fcgung.<\/p>\n<p>Damit die Index-Action die Job-Angebote auflistet, rufen wir die Model-Methode \u201e<strong>getAll()<\/strong>\u201c auf, und \u00fcbergeben den R\u00fcckgabewert der View.<\/p>\n<pre class=\"lang:php decode:true \">public function index()\r\n{\r\n\t$data = array(\r\n\t\t'jobs' =&gt; $this-&gt;jobs_model-&gt;getAll(),\r\n\t);\r\n\t\r\n\t$this-&gt;layout-&gt;view('\/jobs\/index', $data);\r\n}\r\n<\/pre>\n<p>In der View k\u00f6nnen wir nun mit der Variable <strong>$jobs<\/strong> die Stellenangebote ausgeben:<\/p>\n<pre class=\"lang:php decode:true \">&lt;h2&gt;\u00dcbersicht&lt;\/h2&gt;\r\n\r\n&lt;a href=\"&lt;?php echo base_url(); ?&gt;jobs\/add\"&gt;Neu anlegen&lt;\/a&gt;\r\n\r\n&lt;table&gt;\r\n\t&lt;thead&gt;\r\n\t\t&lt;th&gt;Bezeichnung&lt;\/th&gt;\r\n\t\t&lt;th&gt;Unternehmen&lt;\/th&gt;\r\n\t\t&lt;th&gt;Aktion&lt;\/th&gt;\r\n\t&lt;\/thead&gt;\r\n\t&lt;tbody&gt;\r\n\t\r\n\t\t&lt;?php foreach($jobs as $job): ?&gt;\r\n\t\t&lt;tr&gt;\r\n\t\t\t&lt;td&gt;&lt;?php echo $job-&gt;title; ?&gt;&lt;\/td&gt;\r\n\t\t\t&lt;td&gt;&lt;?php echo $job-&gt;company; ?&gt;&lt;\/td&gt;\r\n\t\t\t&lt;td&gt;\r\n\t\t\t\t&lt;a href=\"&lt;?php echo base_url() . 'jobs\/view\/'. $job-&gt;id; ?&gt;\"&gt;Ansehen&lt;\/a&gt; \r\n\t\t\t\t&lt;a href=\"&lt;?php echo base_url() . 'jobs\/delete\/'. $job-&gt;id; ?&gt;\"&gt;L\u00f6schen&lt;\/a&gt;\r\n\t\t\t&lt;\/td&gt;\r\n\t\t&lt;\/tr&gt;\r\n\t\t&lt;?php endforeach; ?&gt;\r\n\t\r\n\t&lt;\/tbody&gt;\r\n&lt;\/table&gt;\r\n<\/pre>\n<p>Damit wir ein Jobangebot erstellen k\u00f6nnen, bearbeiten wir unsere Add-View folgenderma\u00dfen (zur Vereinfachung wurden hier die Form-Elemente nicht \u00fcber den Form-Helper erstellt!):<\/p>\n<pre class=\"lang:php decode:true \">&lt;a href=\"&lt;?php echo base_url(); ?&gt;jobs\"&gt;&amp;laquo; Zur&amp;uuml;ck&lt;\/a&gt;\r\n\r\n&lt;h2&gt;Neues Jobangebot erstellen&lt;\/h2&gt;\r\n\r\n&lt;?php echo form_open(); ?&gt;\r\n\r\n&lt;table&gt;\r\n\t&lt;tr&gt;\r\n\t\t&lt;td&gt;Bezeichnung:&lt;\/td&gt;\r\n\t\t&lt;td&gt;&lt;input type=\"text\" name=\"title\" \/&gt;&lt;\/td&gt;\r\n\t&lt;\/tr&gt;\r\n\t&lt;tr&gt;\r\n\t\t&lt;td&gt;Unternehmen:&lt;\/td&gt;\r\n\t\t&lt;td&gt;&lt;input type=\"text\" name=\"company\" \/&gt;&lt;\/td&gt;\r\n\t&lt;\/tr&gt;\r\n\t&lt;tr&gt;\r\n\t\t&lt;td&gt;Beschreibung:&lt;\/td&gt;\r\n\t\t&lt;td&gt;&lt;textarea name=\"description\"&gt;&lt;\/textarea&gt;&lt;\/td&gt;\r\n\t&lt;\/tr&gt;\r\n\t&lt;tr&gt;\r\n\t\t&lt;td&gt;&lt;\/td&gt;\r\n\t\t&lt;td&gt;&lt;input type=\"submit\" value=\"Speichern\" \/&gt;&lt;\/td&gt;\r\n\t&lt;\/tr&gt;\r\n&lt;\/table&gt;\r\n\r\n&lt;?php echo form_close(); ?&gt;\r\n<\/pre>\n<p>Die zugeh\u00f6rige Action sieht dann folgenderma\u00dfen aus:<\/p>\n<pre class=\"lang:php decode:true \">public function add()\r\n{\r\n\t$post = $this-&gt;input-&gt;post(NULL, TRUE);\r\n\t\r\n\tif($post) {\r\n\t\t$data = array(\r\n\t\t\t'title'\t\t=&gt; $post['title'],\r\n\t\t\t'company'\t\t=&gt; $post['company'],\r\n\t\t\t'description'\t=&gt; $post['description'],\r\n\t\t);\r\n\t\t\t\r\n\t\t$this-&gt;jobs_model-&gt;add($data);\r\n\t\t\r\n\t\tredirect('jobs');\r\n\t} else {\r\n\t\t$this-&gt;layout-&gt;view('\/jobs\/add');\r\n\t}\r\n}\r\n<\/pre>\n<p>Wenn ein POST-Request erfolgt ist, wird ein neuer Eintrag gespeichert, sonst wird das Formular angezeigt.<\/p>\n<p>Bei der Action zum L\u00f6schen verzichten wir der Einfachheit halber auf jegliche Best\u00e4tigung seitens des Benutzers \u2013 wir l\u00f6schen den Eintrag direkt.<\/p>\n<pre class=\"lang:php decode:true \">public function delete($id)\r\n{\r\n\t$this-&gt;jobs_model-&gt;delete($id);\t\r\n\tredirect('jobs');\r\n}\r\n<\/pre>\n<p>In der Praxis jedoch empfehle ich solche Aktionen unbedingt via POST zu realisieren, da dies sicherer ist! Eine serverseitige Validierung sollte auch nicht fehlen (z.B. ob der Benutzer dazu berechtigt ist\u2026)!<\/p>\n<p>F\u00fcr die Detailansicht muss der Controller nur den entsprechenden Eintrag aus der Datenbank holen und an die View \u00fcbergeben:<\/p>\n<pre class=\"lang:php decode:true \">public function view($id)\r\n{\r\n\t$data = array(\r\n\t\t'job' =&gt; $this-&gt;jobs_model-&gt;getById($id),\r\n\t);\r\n\t\r\n\t$this-&gt;layout-&gt;view('\/jobs\/view', $data);\r\n}<\/pre>\n<p>Die View ist im Prinzip gleich wie jene der Add-Action, nur dass hier anstatt der Eingabefelder die Daten aus der Datenbank angezeigt werden:<\/p>\n<pre class=\"lang:php decode:true \">&lt;a href=\"&lt;?php echo base_url(); ?&gt;jobs\"&gt;&amp;laquo; Zur&amp;uuml;ck&lt;\/a&gt;\r\n\r\n&lt;h2&gt;Details: &lt;?php echo $job-&gt;title; ?&gt;&lt;\/h2&gt;\r\n\r\n&lt;table&gt;\r\n\t&lt;tr&gt;\r\n\t\t&lt;td&gt;Bezeichnung:&lt;\/td&gt;\r\n\t\t&lt;td&gt;&lt;?php echo $job-&gt;title; ?&gt;&lt;\/td&gt;\r\n\t&lt;\/tr&gt;\r\n\t&lt;tr&gt;\r\n\t\t&lt;td&gt;Unternehmen:&lt;\/td&gt;\r\n\t\t&lt;td&gt;&lt;?php echo $job-&gt;company; ?&gt;&lt;\/td&gt;\r\n\t&lt;\/tr&gt;\r\n\t&lt;tr&gt;\r\n\t\t&lt;td&gt;Beschreibung:&lt;\/td&gt;\r\n\t\t&lt;td&gt;&lt;?php echo nl2br($job-&gt;description); ?&gt;&lt;\/td&gt;\r\n\t&lt;\/tr&gt;\r\n&lt;\/table&gt;\r\n<\/pre>\n<p>Somit sind wir das Demoprojekt fertig und haben nebenbei auch die relevantesten Grundfunktionen kennengelernt.<\/p>\n<p>Wer m\u00f6chte, kann auch noch den Standard-Controller \u00e4ndern, sodass beim Aufruf von <a href=\"http:\/\/localhost\/ci-demo\">http:\/\/localhost\/ci-demo<\/a> nicht die CodeIgniter-Willkommensseite, sondern gleich die Jobb\u00f6rse angezeigt wird.<\/p>\n<p>Dazu \u00e4ndern wir in der Datei <strong>routes.php<\/strong> unter <strong>\/application\/config<\/strong> die folgende Zeile von<\/p>\n<pre class=\"lang:php decode:true \">$route['default_controller'] = \"welcome\";<\/pre>\n<p>auf<\/p>\n<pre class=\"lang:php decode:true \">$route['default_controller'] = \"jobs\";<\/pre>\n<p>&nbsp;<\/p>\n<h2>Fazit<\/h2>\n<p>Das CodeIgniter-Framework zeichnet sich im Vergleich zu anderen PHP-Frameworks durch eine sehr hohe Performance und Leichtigkeit aus.<\/p>\n<p>Dadurch, dass es von den Funktionen relativ schlank gehalten wurde, er\u00f6ffnet es dem Entwickler alle Tore, da dieser hier seiner Kreativit\u00e4t freien Lauf lassen kann. Analog dazu, wird er unbewusst auf eine konsequente Art dazu bewegt, sich an Strukturen zu halten.<\/p>\n<p>Diese Art der <a href=\"https:\/\/anexia.com\/de\/softwareentwicklung\/\">Softwareentwicklung<\/a> erm\u00f6glicht dem Entwickler also maximale Freiheiten, schafft es aber, den Code jederzeit gut lesbar und dadurch auch leicht wartbar zu halten.<\/p>\n<p>Wichtig zu erw\u00e4hnen sind vor allem die gro\u00dfe, hinter dem Framework stehende Community, sowie eine gute und umfangreiche Dokumentation mit zahlreichen kleineren Anwendungsbeispielen.<\/p>\n<p>Meiner Meinung nach eignet sich CodeIgniter insbesondere zur Umsetzung von kleinen Projekten bis hin zu Projekten mittlerer Gr\u00f6\u00dfenordnung.<\/p>\n<p>&nbsp;<\/p>\n<p>Offizielle Homepage: <a href=\"http:\/\/www.codeigniter.com\/\" target=\"_blank\" rel=\"noopener\">http:\/\/www.codeigniter.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bei CodeIgniter handelt es sich um ein in PHP geschriebenes quelloffenes Webframework, welches sich gro\u00dfer Beliebtheit insbesondere in Amerika erfreut.<\/p>\n","protected":false},"author":15,"featured_media":515,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[80,78,76,79,73,16,14,5,77],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Schnelleinstieg ins CodeIgniter-Framework - ANEXIA Blog<\/title>\n<meta name=\"description\" content=\"Bei CodeIgniter handelt es sich um ein in PHP geschriebenes quelloffenes Webframework, welches sich gro\u00dfer Beliebtheit insbesondere in Amerika erfreut.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Schnelleinstieg ins CodeIgniter-Framework - ANEXIA Blog\" \/>\n<meta property=\"og:description\" content=\"Bei CodeIgniter handelt es sich um ein in PHP geschriebenes quelloffenes Webframework, welches sich gro\u00dfer Beliebtheit insbesondere in Amerika erfreut.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/\" \/>\n<meta property=\"og:site_name\" content=\"ANEXIA Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/anexiagmbh\/\" \/>\n<meta property=\"article:published_time\" content=\"2015-02-27T11:00:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-19T12:09:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/Manuel-Wutte_anexia-blau_web.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"1067\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Manuel Wutte\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_ANEXIA\" \/>\n<meta name=\"twitter:site\" content=\"@_ANEXIA\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manuel Wutte\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"13\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/\",\"url\":\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/\",\"name\":\"Schnelleinstieg ins CodeIgniter-Framework - ANEXIA Blog\",\"isPartOf\":{\"@id\":\"https:\/\/anexia.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/Manuel-Wutte_anexia-blau_web.jpg\",\"datePublished\":\"2015-02-27T11:00:14+00:00\",\"dateModified\":\"2022-04-19T12:09:52+00:00\",\"author\":{\"@id\":\"https:\/\/anexia.com\/blog\/#\/schema\/person\/926f6b9e5aeed88b145cf86d87fd09de\"},\"description\":\"Bei CodeIgniter handelt es sich um ein in PHP geschriebenes quelloffenes Webframework, welches sich gro\u00dfer Beliebtheit insbesondere in Amerika erfreut.\",\"breadcrumb\":{\"@id\":\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#primaryimage\",\"url\":\"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/Manuel-Wutte_anexia-blau_web.jpg\",\"contentUrl\":\"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/Manuel-Wutte_anexia-blau_web.jpg\",\"width\":1600,\"height\":1067},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/anexia.com\/blog\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Schnelleinstieg ins CodeIgniter-Framework\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/anexia.com\/blog\/#website\",\"url\":\"https:\/\/anexia.com\/blog\/\",\"name\":\"ANEXIA Blog\",\"description\":\"[:de] ANEXIA Blog - Technischen Themen, Anexia News und Insights [:]\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/anexia.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/anexia.com\/blog\/#\/schema\/person\/926f6b9e5aeed88b145cf86d87fd09de\",\"name\":\"Manuel Wutte\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/anexia.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9528a61f48f4294cd5f7cd8a4141bd55?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9528a61f48f4294cd5f7cd8a4141bd55?s=96&d=mm&r=g\",\"caption\":\"Manuel Wutte\"},\"url\":\"https:\/\/anexia.com\/blog\/author\/mwu\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Schnelleinstieg ins CodeIgniter-Framework - ANEXIA Blog","description":"Bei CodeIgniter handelt es sich um ein in PHP geschriebenes quelloffenes Webframework, welches sich gro\u00dfer Beliebtheit insbesondere in Amerika erfreut.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/","og_locale":"de_DE","og_type":"article","og_title":"Schnelleinstieg ins CodeIgniter-Framework - ANEXIA Blog","og_description":"Bei CodeIgniter handelt es sich um ein in PHP geschriebenes quelloffenes Webframework, welches sich gro\u00dfer Beliebtheit insbesondere in Amerika erfreut.","og_url":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/","og_site_name":"ANEXIA Blog","article_publisher":"https:\/\/www.facebook.com\/anexiagmbh\/","article_published_time":"2015-02-27T11:00:14+00:00","article_modified_time":"2022-04-19T12:09:52+00:00","og_image":[{"width":1600,"height":1067,"url":"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/Manuel-Wutte_anexia-blau_web.jpg","type":"image\/jpeg"}],"author":"Manuel Wutte","twitter_card":"summary_large_image","twitter_creator":"@_ANEXIA","twitter_site":"@_ANEXIA","twitter_misc":{"Verfasst von":"Manuel Wutte","Gesch\u00e4tzte Lesezeit":"13\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/","url":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/","name":"Schnelleinstieg ins CodeIgniter-Framework - ANEXIA Blog","isPartOf":{"@id":"https:\/\/anexia.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#primaryimage"},"image":{"@id":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#primaryimage"},"thumbnailUrl":"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/Manuel-Wutte_anexia-blau_web.jpg","datePublished":"2015-02-27T11:00:14+00:00","dateModified":"2022-04-19T12:09:52+00:00","author":{"@id":"https:\/\/anexia.com\/blog\/#\/schema\/person\/926f6b9e5aeed88b145cf86d87fd09de"},"description":"Bei CodeIgniter handelt es sich um ein in PHP geschriebenes quelloffenes Webframework, welches sich gro\u00dfer Beliebtheit insbesondere in Amerika erfreut.","breadcrumb":{"@id":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#primaryimage","url":"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/Manuel-Wutte_anexia-blau_web.jpg","contentUrl":"https:\/\/anexia.com\/blog\/wp-content\/uploads\/2015\/01\/Manuel-Wutte_anexia-blau_web.jpg","width":1600,"height":1067},{"@type":"BreadcrumbList","@id":"https:\/\/anexia.com\/blog\/de\/schnelleinstieg-ins-codeigniter-framework\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/anexia.com\/blog\/de\/"},{"@type":"ListItem","position":2,"name":"Schnelleinstieg ins CodeIgniter-Framework"}]},{"@type":"WebSite","@id":"https:\/\/anexia.com\/blog\/#website","url":"https:\/\/anexia.com\/blog\/","name":"ANEXIA Blog","description":"[:de] ANEXIA Blog - Technischen Themen, Anexia News und Insights [:]","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/anexia.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/anexia.com\/blog\/#\/schema\/person\/926f6b9e5aeed88b145cf86d87fd09de","name":"Manuel Wutte","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/anexia.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9528a61f48f4294cd5f7cd8a4141bd55?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9528a61f48f4294cd5f7cd8a4141bd55?s=96&d=mm&r=g","caption":"Manuel Wutte"},"url":"https:\/\/anexia.com\/blog\/author\/mwu\/"}]}},"lang":"de","translations":{"de":492,"en":7014},"amp_enabled":true,"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/posts\/492"}],"collection":[{"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/comments?post=492"}],"version-history":[{"count":58,"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/posts\/492\/revisions"}],"predecessor-version":[{"id":7016,"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/posts\/492\/revisions\/7016"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/media\/515"}],"wp:attachment":[{"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/media?parent=492"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/categories?post=492"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/anexia.com\/blog\/wp-json\/wp\/v2\/tags?post=492"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}