IMPORTANT: Per accedir als fitxer de subversion: http://acacha.org/svn (sense password). Poc a poc s'aniran migrant els enllaços. Encara però funciona el subversion de la farga però no se sap fins quan... (usuari: prova i la paraula de pas 123456)

CodeIgniter

De SergiTurWiki
Share/Save/Bookmark
Dreceres ràpides: navegació, cerca

Contingut

Introducció

Versions

Oco que per Internet hi ha tutorials per a versions anteriors a la 2.0, per exemple la classe Controller no existeix, és CI_Controller.

Instal·lació

Vegem un exemple d'instal·lació en local, la idea es tenir-lo disponible a la URL

http://localhost/codeigniter/

Per instal·lar:

NOTA: Obtenir la URL de la última versió a: http://ellislab.com/codeigniter/user-guide/installation/downloads.html
$ sudo mkdir /var/www/codeigniter
$ cd /var/www/codeigniter
$ sudo wget http://c303150.r50.cf1.rackcdn.com/CodeIgniter_2.1.4.zip
$ sudo unzip CodeIgniter_2.1.4.zip 
$ sudo rm CodeIgniter_2.1.4.zip
$ sudo joe application/config/config.php 

I canvieu la línia:

 $config['base_url']     = ;

per:

$config['base_url']     = 'http://localhost/codeigniter';

Ara podeu accedir a la URL

http://localhost/codeigniter/

Ja està instal·lat. Com podeu veure i us indica la primera pàgina s'utilitza el paradigma de disseny MVC. A la pàgina de welcome tenim la Vista al fitxer:

application/views/welcome_message.php

On podeu veure només hi ha html no codi PHP. El controlador és:

application/controllers/welcome.php

Estructura de les carpetes. Modificacions de la estructura bàsica

El més important abans de fer modificacions en la forma que funciona Code igniter és entendre com funciona. Bàsicament code igniter és una framework que es base en controlar el flux de l'aplicació passant sempre pel mateix fitxer. En el cas de code igniter aquest fitxer és:

index.php

Tal i com es pot veure a la imatge del manual de Code igniter:

http://ellislab.com/_user_guide_src_ci/images/appflowchart.gif

Si us baixeu la última versió de codeigniter obtindreu un fitxer zip on trobareu 3 carpetes:

  • system: aquesta és la carpeta més important, la que realment conté el codi propi de code igniter, aka core
  • application: esta és la carpeta on s'ha de posar el codi propi. Si observeu amb atenció la carpeta veureu que es tracta bàsicament d'una plantilla amb carpetes buides (excepte els index.html que s'ofereixen per defecte per seguretat - inclouen un missatge de directory acces has forbidenn -). Es tracta doncs d'una proposta
  • user-guide: és una còpia del manual d'usuari que es pot trobar ala web de code igniter. Aquesta carpeta es pot descartar o guardar a part del nostre codi.
NOTA: A la carpeta application hi ha un controlador i una vista per defecte (welcome). Aquests fitxers segurament els descartareu per a la vostra aplicació

Cal tenir en compte que també hi ha fitxers ocults, sobretot .htacces per garantir la seguretat d'una instal·lació per defecte.

Recursos:

Múltiples aplicacions i una sola instal·lació de code igniter

Requeriments:

Instal·leu LAMP:

$ sudo tasksel install lamp-server

Hi ha diverses formes de fer-ho. Us indiquem en aquest apartat una opció possible basada en instal·lar code igniter a /usr/share/codeigniter. Bàsicament seguim els mateixos passos que la instal·lació "normal" per a la URL

http://localhost/codeigniter/

Obtenim el codi de l'última versió a:

http://ellislab.com/codeigniter/user-guide/installation/downloads.html

Per línia de comandes pot ser quelcom similar a:

$ sudo mkdir -p /usr/share/codeigniter
$ cd /usr/share/codeigniter
$ sudo wget http://c303150.r50.cf1.rackcdn.com/CodeIgniter_2.1.4.zip
$ sudo apt-get install unzip
$ sudo unzip CodeIgniter_2.1.4.zip 
$ sudo rm CodeIgniter_2.1.4.zip 
NOTA: El següent pas només és necessari per a fer funcionar l'aplicació per defecte que porta com exemple code igniter: el welcome. Us podeu saltar els següents passos si no voleu aquesta aplicació per a res. Passeu al següent subapartat per veure com configurar més aplicacions que no siguin la welcome amb una sola instància o instal·lació de code igniter

Ara editem la configuració de l'aplicació per defecte

$ sudo joe /usr/share/codeigniter/application/config/config.php 

I canvieu la línia:

 $config['base_url']     = ;

per:

$config['base_url']     = 'http://localhost/codeigniter';

Ara configureu Apache amb:

$ sudo joe /etc/apache2/conf.d/codeigniter.conf

I poseu

Alias /codeigniter /usr/share/codeigniter

Apliqueu els canvia a Apache:

$ sudo /etc/init.d/apache2 reload

Ara podeu accedir a la URL

http://localhost/codeigniter/

Ja està instal·lat. Com podeu veure i us indica la primera pàgina s'utilitza el paradigma de disseny MVC. A la pàgina de welcome tenim la Vista al fitxer:

application/views/welcome_message.php

On podeu veure només hi ha html no codi PHP. El controlador és:

application/controllers/welcome.php

Exemple de configuració d'aplicació codeigniter separada del codi de codeigniter

NOTA: Primer heu d'instal·lar code igniter seguint els passos de l'apartat anterior

Hi ha dos opcions, o instal·leu una aplicació ja existent o en creeu una des de zero. En el segon cas lo típic és utilitzar la carpeta application de code igniter com a plantilla. Anem a suposar volem crear l'aplicació helloworldcodeigniter ho podeu fer per exemple amb:

$ sudo mkdir /var/www/codeigniterhelloworld
$ sudo cp -r /usr/share/codeigniter/application /var/www/codeigniterhelloworld
$ sudo cp -r /usr/share/codeigniter/index.php /var/www/codeigniterhelloworld

Si utilitzeu git també és interessant copiar el fitxer:

$ sudo cp -r /usr/share/codeigniter/.gitignore /var/www/codeigniterhelloworld 

El contingut del qual és:

.DS_Store

application/cache/*
!application/cache/index.html
!application/cache/.htaccess

application/logs/*
!application/logs/index.html
!application/logs/.htaccesss

Ara cal modificar el fitxer index:

$ sudo joe /var/www/codeigniterhelloworld/index.php

I canviar el path de la carpeta system de:

        $system_path = 'system';  

a:

       $system_path = '/usr/share/codeigniter/system';  


Ja podeu accedir a la URL:

http://localhost/codeigniterhelloworld

Ara tocar crear els vostre propi codi.

NOTA: Com podeu veure el fiter .gitignore s'ignoren les carpetes logs i cache

També podeu veure un exemple de com instal·lar una aplicació ja existent d'aquesta forma a ebre-inventory a l'apartat

 Aplicació d'inventari. Instal·lació

Exemple d'instal·lació d'una aplicació esquelet codeigniter

L'objectiu és instal·lar una aplicació senzilla utilitzant HMVC a:

http://localhost/codeigniter_hmvc

A la carpeta:

/usr/share/codeigniter_hmvc

Previament cal tenir instal·lat codeigniter a /usr/share/codeigniter seguint les passes de:

Code_Igniter#M.C3.BAltiples_aplicacions_i_una_sola_instal.C2.B7laci.C3.B3_de_code_igniter

Ara creeu la carpeta:

$ sudo mkdir /usr/share/codeigniter_hmvc
$ cd /usr/share/codeigniter_hmvc

Copiem lo bàsic de Code Igniter:

$ sudo cp -r /usr/share/codeigniter/application .
$ sudo cp -r /usr/share/codeigniter/index.php .

Editem el fitxer index.php i ens assegurem que té la següent configuració:

$system_path = '/usr/share/codeigniter/system';

Ara configurem apache:

$ sudo joe /etc/apache2/conf.d/codeigniter_hmvc

Afegiu:

Alias /codeigniter_hmvc /usr/share/codeigniter_hmvc

I ara aplique els canvis a Apache:

$ sudo /etc/init.d/apache2 reload

Instal·lació avançada. Canviar la localització de les carpetes system i application

TODO
http://ellislab.com/codeigniter/user-guide/installation/index.html

If you wish to increase security by hiding the location of your CodeIgniter files you can rename the system and application folders to something more private. If you do rename them, you must open your main index.php file and set the $system_folder and $application_folder variables at the top of the file with the new name you've chosen.

For the best security, both the system and any application folders should be placed above web root so that they are not directly accessible via a browser. By default, .htaccess files are included in each folder to help prevent direct access, but it is best to remove them from public access entirely in case the web server configuration changes or doesn't abide by the .htaccess.

After moving them, open your main index.php file and set the $system_folder and $application_folder variables, preferably with a full path, e.g. '/www/MyUser/system'.

One additional measure to take in production environments is to disable PHP error reporting and any other development-only functionality. In CodeIgniter, this can be done by setting the ENVIRONMENT constant, which is more fully described on the security page.

That's it!

Actualització

Recursos:

Traduccions en català

NOTA: NO he trobat pas traduccions així que les he fet jo mateix. Les podeu trobar a:
https://github.com/acacha/CodeIgniter-catalan

Podeu obtenir el zip a:

https://github.com/acacha/CodeIgniter-catalan/archive/master.zip

Un cop tingueu el zip heu de copiar la carpeta catalan a dins la carpeta languages que hi ha dins la carpeta system de codeigniter (en el nostre cas /usr/share/codeigniter/system)

Pas a pas amb comandes:

$ cd /usr/share/codeigniter/system/language
$ sudo wget -O catalan.zip https://github.com/acacha/CodeIgniter-catalan/archive/master.zip
$ sudo unzip catalan.zip 
$ sudo rm -rf catalan.zip
$ sudo mv CodeIgniter-catalan-master/catalan catalan
$ sudo rm -rf CodeIgniter-catalan-master

Controladors i vistes

A partir d'un URL base com:

http://localhost/codeigniter

Tot passa pel fitxer:

/var/www/codeigniter/index.php
NOTA: El path absolut pot canviar en el vostre cas

Com podeu veure hi ha una carpeta per als fitxers controladors (que contenen codi PHP):

application/controllers

Fitxers per defecte:

index.html  welcome.php

i un altre on van les vistes:

application/views

Fitxers per defecte:

index.html  welcome_message.php

Les pàgines s'accedeixen passant pel fitxer index, per exemple vegem un típic hello World, al qual i volem accedir per la URL:

http://localhost/codeigniter/index.php/hello/world

Cal crear el controlador, creant un fitxer hello com la primera part de la URL després de index.php, més la extensió PHP:

$ cd /var/www/codeigniter
$ sudo joe application/controllers/hello.php
<?php

class Hello extends CI_Controller {
  
function world()
{ 
  $this->load->view('world_view');
} 
  
} 
?>

i world és el nom de la funció per que la següent part de la URL és world precisament. Ara cal crear el fitxer world_view

$ sudo joe application/views/world_view.php

Si no creeu la vista us dirà:

An Error Was Encountered

Unable to load the requested file: world_view.php

Podriem també accedir a un fitxer index per defecte, és a dir la URL:

http://localhost/codeigniter/index.php/hello

o

http://localhost/codeigniter/index.php/hello/

creant una funció index:

       function index()
      {
        $this->load->view('world_view');
      }

En aquest cas mostrem la mateixa vista, però podem mostrar un altre, només cal crear-la.

Vegem com funciona la pàgina d'exemple:

$ cat application/controllers/welcome.php 
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -  
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in 
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see http://codeigniter.com/user_guide/general/urls.html
	 */
	public function index()
	{
		$this->load->view('welcome_message');
	}
}


Mapeig URLS -> Controladors

El mapeig és senzill, es parteix d'una URL base, en el nostre cas:

http://localhost/codeigniter

I el mapeig és:

http://{URLBASE}/[controller-class]/[controller-method]/[arguments]

La següent foto ho mostra molt bé:

http://farm3.static.flickr.com/2091/2202884331_13621873de.jpg?v=0

Passar paràmetres entre les vistes i els controladors

Bases de dades

La configuració de la base de dades es fa al fitxer:

$ cat application/config/database.php
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the 'Database Connection'
| page of the User Guide.
|
| -------------------------------------------------------------------
| EXPLANATION OF VARIABLES
| -------------------------------------------------------------------
|
|	['hostname'] The hostname of your database server.
|	['username'] The username used to connect to the database
|	['password'] The password used to connect to the database
|	['database'] The name of the database you want to connect to
|	['dbdriver'] The database type. ie: mysql.  Currently supported:
				 mysql, mysqli, postgre, odbc, mssql, sqlite, oci8
|	['dbprefix'] You can add an optional prefix, which will be added
|				 to the table name when using the  Active Record class
|	['pconnect'] TRUE/FALSE - Whether to use a persistent connection
|	['db_debug'] TRUE/FALSE - Whether database errors should be displayed.
|	['cache_on'] TRUE/FALSE - Enables/disables query caching
|	['cachedir'] The path to the folder where cache files should be stored
|	['char_set'] The character set used in communicating with the database
|	['dbcollat'] The character collation used in communicating with the database
|				 NOTE: For MySQL and MySQLi databases, this setting is only used
| 				 as a backup if your server is running PHP < 5.2.3 or MySQL < 5.0.7
|				 (and in table creation queries made with DB Forge).
| 				 There is an incompatibility in PHP with mysql_real_escape_string() which
| 				 can make your site vulnerable to SQL injection if you are using a
| 				 multi-byte character set and are running versions lower than these.
| 				 Sites using Latin-1 or UTF-8 database character set and collation are unaffected.
|	['swap_pre'] A default table prefix that should be swapped with the dbprefix
|	['autoinit'] Whether or not to automatically initialize the database.
|	['stricton'] TRUE/FALSE - forces 'Strict Mode' connections
|							- good for ensuring strict SQL while developing
|
| The $active_group variable lets you choose which connection group to
| make active.  By default there is only one group (the 'default' group).
|
| The $active_record variables lets you determine whether or not to load
| the active record class
*/

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;


/* End of file database.php */

Un cop feta la configuració la base de dades es carrega al constructor del controlador:

 class Main extends CI_Controller {
 
    function __construct()
    {
        parent::__construct();
 
        $this->load->database();
 
    }

...

ORM

CodeIgniter a diferencia d'altres frameworks no suporta ORM/Object Relation Mapper de forma nativa. Es pot utilitzar Datamapper.

http://datamapper.wanwizard.eu/

També existeix IgnitedRecord.

Session

http://ellislab.com/codeigniter/user-guide/libraries/sessions.html

Flashdata

Informació que es guarda per a només la següent petició

Per passar dades utilitzant flashdata:

 $this->session->set_flashdata('item', 'value');

També es pot passar un array de la mateixa forma que es fa amb la funció set_userdata():

$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );

$this->session->set_flashdata($newdata);

Per llegir les dades:

 $this->session->flashdata('item');

Es pot mantenir les dades per a un petició adicional (request adicional) amb:

 $this->session->keep_flashdata('item');

Code Igniter i AJAX

Vegeu Jquery Ajax

Recursos:

Disseny modular. HMVC

Vegeu HMVC

Plugins

Sparks

Sparks is a package management system for Codeigniter that will allow you install high-quality libraries into your applications instantly.

Helpers

Email

Enviar correus electrònics

Protocols

Code igniter suporta els següents protocols:

 Mail, Sendmail, i SMTP

On:

  • Mail: funció mail de PHP?
  • Sendmail: utilitzar una aplicació externa (comanda) per enviar el correu tipus sendmail
  • SMTP: Cal indicar un servidor SMTP local o remot i les credèncials per entrar al servidor
IMPORTANT: El mètode sendmail no implica necessàriament tenir que utilitzar el servidor de correu electrònic sendmail. Per exemple es pot utilitzar Postfix. Vegeu l'article de desambiguació sendmail on s'explica que sendmail pot ser tant una comanda com un programari servidor de correu electrònic

El protocol s'indica com un preferència al configurar l'enviament d'emails:

$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
$config['charset'] = 'iso-8859-1';
$config['wordwrap'] = TRUE;

$this->email->initialize($config);
Exemples
Des de localhost a Ubuntu utilitzant Postfix per enviar email (sendmail)
Depurar

Per depurar es pot utilitzar:

echo $this->email->print_debugger();

Si dona l'error:

Unable to send email using PHP mail(). Your server might not be configured to send mail using this method.

Recursos:

Validar correu electrònic

Per carregar el Helper:

$this->load->helper('email');

Funcions:

  • valid_email('email')

Exemple de comprovar si un email és correcte:

$this->load->helper('email');

if (valid_email('email@somesite.com'))
{
    echo 'email is valid';
}
else
{
    echo 'email is not valid';
}

Send Email:

send_email('recipient', 'subject', 'message')

Per algo més elaborat la classe Email:

http://ellislab.com/codeigniter/user-guide/libraries/email.html

Recursos:

Errors i Logging

Control d'errors

Al fitxer index.php es defineix el nivell d'error de PHP (vegeu PHP i errors):

...
define('ENVIRONMENT', 'development'); 
...
if (defined('ENVIRONMENT'))
{
        switch (ENVIRONMENT)
        {
                case 'development':
                        error_reporting(E_ALL);
                break;
 
                case 'testing':
                case 'production':
                        error_reporting(0);
                break;

                default:
                        exit('The application environment is not set correctly.');
        }
}

Com podeu veure la variable ENVIRONMENT determinar el nivell d'error i per defecte està activat developmen (es mostren tots els errors).

log_threshold a config.php

Al fitxer application/config/config.php es pot establir el nivell a partir del qual es mostren els missatges al fitxers de log

$config['log_threshold'] = 0;
IMPORTANT: A explotació excepte que s'estigui depurant es recomana no activar més enllà que els errors

Recursos:

Automatic base_url


:*https://github.com/EllisLab/CodeIgniter/wiki/Dynamic-Base-Url
:*https://github.com/EllisLab/CodeIgniter/wiki/Automatic-base-url

== Vegeu també ==
:*[[PHP Frameworks]]
:*[[PHP]]
:*[[Javascript]]

== Enllaços externs ==
:*http://ellislab.com/codeigniter
OpenFPnet
IES Nicolau Copèrnic