2012-08-11 102 views
2

相当有经验的程序员,但新的CakePHP 2.1和花我的天挣扎按照手册来得到一个定制的助手在查看工作:http://book.cakephp.org/2.0/en/views/helpers.html自定义助手CakePHP中的错误

我一直没能找到答案并会非常感谢任何蛋糕的专业知识。

在app /助手/ 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; 

    } 

} 

和我的应用程序控制器/控制器/ 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 

因此,未定义财产的通知大概会导致致命的错误......但为什么如此,如果它按照食谱实施?

达伦

回答

4

正确的语法是$this->helpers[] = 'spanWrapper';方法中加载帮手时,或将其添加到您的公共$helpers阵列代替。

+1

除了这个事实,应该是最好的“SpanWrapper”,以保持一致(驼峰) – mark 2012-08-11 19:23:25

+0

啊。我懂了。 感谢....工作。我想我已经在食谱中使用了这个例子,我会检查他们的代码是否也可能是错误的。 – tremendusapps 2012-08-13 17:02:54

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

+0

或者只是升级到2.2 - 那么这个帮手应该会自动加载懒惰:) – mark 2012-08-23 09:06:32