CakePHP错误中的自定义助手

时间:2012-08-11 11:52:01

标签: cakephp helper cakephp-2.1 view-helpers

相当有经验的程序员,但对CakePHP 2.1不熟悉,并且花费我的一天努力让自定义助手在View中工作:http://book.cakephp.org/2.0/en/views/helpers.html

我无法找到答案,非常感谢Cake的专业知识。

我在app / Helper / EntriesHelper.php中的帮助文件:

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

class EntriesHelper extends AppHelper {

    public function __construct(View $view, $settings = array()) {
        parent::__construct($view, $settings);
    }

    public function spanWrapper($content) {

        if(substr($content,0,1) == "@") {
            return "<span class='label label-warning'>$content</span>";
        }
        else if(substr($content,0,1) == "#") {
            return "<span class='label label-default'>$content</span>";
        } 
        else if (substr($content,0,4) == "http" || substr($content,0,3) == "www") {
            return "<span class='label'>$content</span>";
        }

        return $content;

    }

}

我在app / Controller / EntriesController中的控制器:

App::uses('AppController', 'Controller');

class EntriesController extends AppController {

    public $helpers = array('Form', 'Html', 'Js', 'Time');

    #public $components = array('RequestHandler');

    #public $viewClass = 'Json';

    public function index() {

        $helpers[] = 'spanWrapper';
        $this->Entry->recursive = 1;
        $this->set('entries', $this->paginate());
        #$this->set('_serialize', array('entries'));

    }
}

但是来自我的视图的调用失败了:

$this->Entries->spanWrapper($entry['Entry']['title']);

错误:

Notice (8): Undefined property: View::$Entries [CORE/Cake/View/View.php, line 806]
Fatal error: Call to a member function spanWrapper() on a non-object in <path removed>/app/View/Entries/index.ctp on line 35

因此,未定义属性的通知可能会导致致命错误......但为什么如此,如果按照菜谱实施?

的Darren

3 个答案:

答案 0 :(得分:4)

在方法中加载帮助程序时,正确的语法为$this->helpers[] = 'spanWrapper';,或者将其添加到公共$helpers数组中。

答案 1 :(得分:0)

如果您想在整个控制器中使用帮助器,则应将其添加到$helpers中的EntriesController数组:

class EntriesController extends AppController {

  public $helpers = array('Form', 'Html', 'Js', 'Time', 'Entries');

  /* ... */

}

如果您需要整个应用程序中的帮助程序,可以用同样的方式将其添加到AppController

如果在另一侧只需要在一个视图中,您可以选择仅动态加载它。在您的视图中,在您第一次使用帮助程序之前调用HelperCollection->view()

$this->Helpers->load('Entries');

CakePHP书中的所有三种方法都是documented very well

答案 2 :(得分:0)

您可以查看自定义助手类的此链接 http://ishakali.wordpress.com/2013/06/04/custom-helper-class-in-cake-php/ 它可能会有所帮助