Bonjour,
J'ai du mal a comprendre la différence entre un component et un Helper. Ques sont les principales différences??
Par exemple, j'ai créé un Component pour avoir une image Captcha
Ce code n'est pas encore testlé, il peut buger:
(je pense pas qu'il y abesoin dele lire en détail...)
<?php
class MathcaptchaComponent extends Component{
function image(){
/*===============================================================
General captcha settings
===============================================================*/
// captcha width
$captcha_w = 150;
// captcha height
$captcha_h = 35 ;
// minimum font size; each operation element changes size
$min_font_size = 12;
// maximum font size
$max_font_size = 18;
// rotation angle
$angle = 20;
// background grid size
$bg_size = 13;
// path to font - needed to display the operation elements
$font_path = 'fonts/courbd.ttf';
// array of possible operators
$operators=array('+','-','*');
// first number random value; keep it lower than $second_num
$first_num = rand(1,5);
// second number random value
$second_num = rand(6,11);
/*===============================================================
From here on you may leave the code intact unless you want
or need to make it specific changes.
===============================================================*/
shuffle($operators);
$expression = $second_num.$operators[0].$first_num;
#echo "=";
/*
operation result is stored in $session_var
*/
eval("\$session_var=".$second_num.$operators[0].$first_num.";");
/*
save the operation result in session to make verifications
*/
$this->Session->write('Security.number',$session_var);
/*
start the captcha image
*/
$img = imagecreate( $captcha_w, $captcha_h );
/*
Some colors. Text is $black, background is $white, grid is $grey
*/
$black = imagecolorallocate($img,0,0,0);
$white = imagecolorallocate($img,255,255,255);
$grey = imagecolorallocate($img,215,215,215);
/*
make the background white
*/
imagefill( $img, 0, 0, $white );
/* the background grid lines - vertical lines */
for ($t = $bg_size; $t<$captcha_w; $t+=$bg_size){
imageline($img, $t, 0, $t, $captcha_h, $grey);
}
/* background grid - horizontal lines */
for ($t = $bg_size; $t<$captcha_h; $t+=$bg_size){
imageline($img, 0, $t, $captcha_w, $t, $grey);
}
/*
this determinates the available space for each operation element
it's used to position each element on the image so that they don't overlap
*/
$item_space = $captcha_w/3;
/* first number */
imagettftext(
$img,
rand(
$min_font_size,
$max_font_size
),
rand( -$angle , $angle ),
rand( 10, $item_space-20 ),
rand( 25, $captcha_h-25 ),
$black,
$font_path,
$second_num
);
/* operator */
imagettftext(
$img,
rand(
$min_font_size,
$max_font_size
),
rand( -$angle, $angle ),
rand( $item_space, 2*$item_space-20 ),
rand( 25, $captcha_h-25 ),
$black,
$font_path,
$operators[0]
);
/* second number */
imagettftext(
$img,
rand(
$min_font_size,
$max_font_size
),
rand( -$angle, $angle ),
rand( 2*$item_space, 3*$item_space-20),
rand( 25, $captcha_h-25 ),
$black,
$font_path,
$first_num
);
/* image is .jpg */
header("Content-type:image/jpeg");
/* name is secure.jpg */
header("Content-Disposition:inline ; filename=secure.jpg");
/* output image */
return imagejpeg($img);
}
}
Puis dans mon AppController j'ai ajouté ceci
public $components = array(
'Session',
'Ctrl',
'Mathcaptcha'
);
J'ai vu ensuite que pour appelé l'image, il fallait faire
<?php echo $this->Mathcaptcha->image(); ?>
Mais il me retourne qu'il ne trouve pas le Helper
Error: Create the class MathcaptchaHelper below in file: app/View/Helper/MathcaptchaHelper.php
Alors du coup, je me suis dit, je renomme le fichier MathcaptchConponent en MathcaptchaHelper et je le dplace dans les Helper?
Pourriez-vous fire en 2-3 lignes les differentes fonctionnalités entre un Component et un Helper?
Merci beaucoup
Bonjour. Un composant est fait pour être utilisé depuis les controller/model[code]Les Components (Composants) sont des regroupements de logique applicative qui sont partagés entre les controllers.[/code]*[u]Source :[/u]* [url=Les Components (Composants) sont des regroupements de logique applicative qui sont partagés entre les controllers.]Components (Composants)[/url]. Contrairement aux helpers qui sont fait pour être utilisé depuis les view[code]Les Helpers (Assistants) sont des classes comme les components, pour la couche de présentation de votre application. Ils contiennent la logique de présentation qui est partagée entre plusieurs vues, elements ou layouts.[/code]*[u]Source :[/u]* [url=http://book.cakephp.org/2.0/fr/views/helpers.html]Helpers (Assistants)[/url]. Il est donc normal qu'il ne trouve pas un Helper qui n'existe pas et le message d'erreur te l'explique bien. Tu n'as pas du comprendre grand chose, car tu le déclare comme un component alors qu'ensuite tu veux l'appeler comme si c'était un helper.