In acest articol vom vorbi despre FormHelper in CodeIgniter. Sa incepem cu inceputul:
Helper-ii sunt niste clase speciale, prezente in majoritatea Framework-urilor. Ei sunt de fapt niste clase utilitare care ne ofera metode elegante de a implementa functii repetitive.
Acest articol este dedicat unui Helper al carui scop este asistarea in crearea elementelor unui formular. De ce am vrea asta? De exemplu pentru a manipula mai usor si mai elegant atributele create dinamic ale fiecarui element in parte.
Pentru a putea folosi aceasta clasa, ea trebuie mai intai initializata. Initializarea se face in Controller (controllers/contact.php)
, iar sintaxa este:
$this->load->helper('form');
Ok, sa intram incepem sa construim. Tot codul pe care il scriem de acum incolo este continut in View (views/contact.php)
. In primul rand avem nevoie sa deschidem formularul:
<?php echo form_open('contact/send'); ?>
Acest cod va genera un tag de forma:
<form method="post" action="http:/localhost/codeigniter/index.php/contact/send" />
De multe ori, nu-i suficient sa specificam atributul action in formularele noastre. Folosim id
, name
sau orice alt atribut standard consideram necesar pentru referinta in JavaScript si nu numai.
Pentru asta folosim urmatoarea sintaxa:
<?php $attributes = array('id' => 'formId', 'name' => 'formName'); form_open('contact/send', $attributes); ?>
Astfel, se genereaza un tag care arata asa:
<form method="post" action="http:/localhost/codeigniter/index.php/contact/send" id="formId" name="formName" />
Functia form_open()
ia un al trei-lea parametru. Acesta este rezervat pentru input-urile de tip hidden. Daca dorim sa introducem unul sau mai multe campuri ascunse vom folosi urmatorul cod:
<?php $attributes = ''; // Il definim doar pentru ca functia sa fie lizibila $hidden = array('id' => 0, 'parentId' => 0); echo form_open('contact/send', $attributes, $hidden); ?>
Sa explicam ce se intampla in cod; $hidden
este un Array asociativ unde cheia fiecarui element este numele input-ului ascuns, iar valoarea elementului va fi valoarea input-ului.
Ati observat probabil, ca am definit variabila $attributes
dar am setat-o cu un sir de caractere gol. Asa cum am mentinoat si in comentariu, are caracter pur demonstrativ. Voiam sa se vada clar ca $hidden
este al trei-lea paramentru, dar functia ar putea arata la fel de bine asa: echo form_open('contact/send', '', $hidden);
Rezultatul:
<form method="post" action="http:/localhost/codeigniter/index.php/contact/send" /> <input type="hidden" name="id" value="0" /> <input type="hidden" name="parentId" value="0" />
Ca sa inchidem formularul, folosim:
<?php echo form_close(); ?>
Acum sa vedem cateva exemple pentru diverse tag-uri necesare unui formular. O sa incepem cu tag-ul input
, pentru ca este cel mai des urtilizat.
<?php echo form_input('name', 'Mihai Baboi'); ?>
Unde, primul parametru va fi atributul name
, iar al doi-lea va fi atributul value
. Astfel ca rezultatul va arata asa:
<input type="text" name="name" value="Mihai Baboi" />
Daca dorim sa adaugam un atribut in plus, il putem trimite ca al trei-lea parametru:
<?php $js = 'onClick="some_function()"'; echo form_input('name', 'Mihai Baboi', $js); ?>
Rezultatul va fi:
<input type="text" name="name" value="Mihai Baboi" onClick="some_function()" />
Cu toate acestea, daca veti lucra cu date dinamice pentru aceste atribute, recomand urmatoarea sintaxa:
<?php $attributes = array( 'id' => 'name', 'name' => 'name', 'size' => '40', 'maxlength' => '64', 'onClick' => 'some_function()' ); echo form_input($attributes); ?>
Si codul generat:
<input type="text" id="name" name="name" size="40" maxlength="64" onClick="sime_function()" />
Un alt exemplu de tag pe care putem sa-l generam foarte elegant este <select>
<?php $models = array( '1series' => 'BMW Seria 1', '3series' => 'BMW Seria 3', '5series' => 'BMW Seria 5', 'm3' => 'BMW M3', 'm5' => 'BMW M5' ); $sportModels = array('m3', 'm5'); // Exemplul 1 echo form_dropdown('cars', $models, '3series'); // Exemplul 2 echo form_dropdown('cars', $models, $sportModels); ?>
In exemplul de mai sus, functia form_dropdown()
ia ca prim parametru numele tag-ului select
. Al doi-lea parametru este un array cu optiunile select-ului, iar parametrul trei specifica ce optiune sa fie selectata. Astfel, cele doua exemple vor genera urmatorul rezultat:
<!-- Exemplul 1 --> <select name="cars"> <option value="1series">BMW Seria 1</option> <option value="3series" selected="selected">BMW Seria 3</option> <option value="5series">BMW Seria 5</option> <option value="m3">BMW M3</option> <option value="m5">BMW M5</option> </select> <!-- Exemplul 2 --> <select name="cars" multiple="multiple"> <option value="1series">BMW Seria 1</option> <option value="3series">BMW Seria 3</option> <option value="5series">BMW Seria 5</option> <option value="m3" selected="selected">BMW M3</option> <option value="m5" selected="selected">BMW M5</option> </select>
Deja acesta este un exemplu foarte bun pentru care am vrea sa folosim un Helper de acest gen. Este mult mai elegant sa iteram prin rezultatele dintr-o baza de date si sa generam array-ul $models
, decat sa intercalam HTML si PHP pentru a genera optiunile “de mana”.
Acesta este principiul de functionare al lui FormHelper
. N-am sa trec prin toate functiile pe care la contine, pentru ca principiul de functionare e acelasi. Va las in schimb cu un exemplu care sa va dea o idee despre cum ar trebui sa arate un formular la final.
<div id="form">
<?php echo form_open('contact/send'); ?>
<?php echo form_hidden('id', 0); ?>
<?php echo form_fieldset('Add comment'); ?>
<p><?php echo form_input($inputName); echo form_label('Name', 'name') ?></p>
<p><?php echo form_input('email', 'te**@em***.com', $js); echo form_label('Email', 'email') ?></p>
<p><?php echo form_input('website'); echo form_label('Website', 'website') ?></p>
<p><?php echo form_label('Comment', 'comment') ?><br /><?php echo form_textarea($textArea); ?>
<?php echo form_fieldset_close(); ?>
<?php echo form_submit('sumbit', 'Save'); ?>
<?php echo form_close(); ?>
</div>
Formularul nu contine niciun fel de stiluri, pentru ca ne vom ocupa de el intr-un articol viitor, atunci cand il veti avea atasat in forma finala. Pana atunci, astept intrebarile si sugestiile voastre.
[Later Edit]
Asa cum bine a spus George, in cazul in care folositi in mai mule locuri acesti Hepleri, este indicat sa ii includeti in autolad, pentru a nu crea o instanta de fiecare data. Pentru asta, mergeti in application/config/autoload.php
si modificati $autoload['helper'] = array();
astfel:
$autoload['helper'] = array('form');