2013-02-26 78 views
1

我有一个名为View1.ctp的视图。在这个视图中我调用一个名为'Captcha'的控制器函数,其视图是captcha.ctp。我有一个名为$ text的变量查看captcha.ctp.I想在我的view1.ctp中访问这个$ text变量,我应该怎么做? (注:CakePHP的版本-2.3) View1.ctp在另一个视图中访问视图变量-Cakephp

 <h1>Add Comment</h1> 
     <?php 
     $post_id= $posts['Post']['id']; 
     echo $this->Form->create('Comment',array('action' => 'comment','url' =>   array($post_id,$flag))); 
     echo $this->Form->input('name'); 
     echo $this->Form->input('email'); 
     echo $this->Form->input('text', array('rows' => '3')); 
     echo "Enter Captcha Code: "; 
     echo $this->Html->image(
     array('controller' => 'posts', 'action' => 'captcha')); 
     echo $this->Form->input('code'); 
     echo $this->Form->end('Add comment'); 
      ?> 

     captcha.ctp: 

      <?php 
      $this->Session->read(); 
      $text = rand(10000,99996); 
      $_SESSION["vercode"] = $text; 
      $height = 25; 
      $width = 65; 
      $image_p = imagecreate($width, $height); 
      $black = imagecolorallocate($image_p, 0, 0, 0); 
      $white = imagecolorallocate($image_p, 255, 255, 255); 
      $font_size = 14; 
      imagestring($image_p, $font_size, 5, 5, $text, $white); 
      imagejpeg($image_p, null, 80); 
      ?> 

回答

0

一种更好的方法是打开验证码查看成Helper代替,这是更合适的。所以移动captcha.ctp到应用程序/查看/助手/ CaptchaHelper.php和包裹它的内容在一类,如:

<?php 
App::uses('AppHelper', 'View/Helper'); 

class CaptchaHelper extends AppHelper { 

    function create() { 
     // This line doesn't make much sense as no data from the session is used 
     // $this->Session->read(); 

     $text = rand(10000, 99996); 

     // Don't use the $_SESSION superglobal in Cake apps 
     // $_SESSION["vercode"] = $text; 

     // Use SessionComponent::write instead 
     $session = new SessionComponent(new ComponentCollection()); 
     $session->write('vercode', $text); 

     $height = 25; 
     $width = 65; 
     $image_p = imagecreate($width, $height); 
     $black = imagecolorallocate($image_p, 0, 0, 0); 
     $white = imagecolorallocate($image_p, 255, 255, 255); 
     $font_size = 14; 
     imagestring($image_p, $font_size, 5, 5, $text, $white); 

     // Return the generated image 
     return imagejpeg($image_p, null, 80); 
    } 

} 

然后在你的PostsController,添加Captcha的助手阵列:

public $helpers = array('Captcha'); 

(或者,如果你已经有了一个帮手阵列,只是将其追加到该数组。)

从View1.ctp

然后,你可以调用助手返回图像:

echo $this->Html->image($this->Captcha->create()); 

它的“预期”值将被存储在会话密钥vercode中,您还可以从表单处理逻辑中的PostsController中读取该值。

+0

非常感谢。请试试看,并让你知道先生 – user1479469 2013-02-26 10:25:22

+0

,但先生我需要访问另一个控制器中的这个vercode CommentsController.php不在PostsController.ctp – user1479469 2013-02-26 10:32:33

+0

我得到这个错误sir.Error:调用成员函数在非对象上读取() – user1479469 2013-02-26 10:36:42

相关问题