CakePHP助手-在助手上集成助手

时间:2018-08-17 18:42:13

标签: php cakephp

我在使用HtmlHelper的CakePHP 2.x上创建了自己的帮助器,但是它不起作用,这是代码

class NavHelper extends Helper {

   public $helpers = array("Html", "Javascript");

   function __construct($config = array()) {

}

function link($label, $options) {
    if($this->perms(array('controller'=>$options['controller'],'action'=>$options['action']))) {
        $html = '<a ';
        foreach($options as $label => $value) {
            if($label != 'action' || $label != 'controller') {
                $html .= " {$label}=\"{$value}\" ";
            }
            $html .= " href='".$this->Html->url(array('controller'=>$options['controller'],'action'=>$options['action']))."'>".$label."</a>";
        }

        return $html;
    }
    return '';
}
  

致命错误:在非对象上调用成员函数url()   在    C:\ Bitnami \ wappstack-5.5.28-0 \ apache2 \ htdocs \ pokeadmin_v2 \ app \ View \ Helper \ NavHelper.php 17
< / p>

但是$ this-> Html-> url在CakePHP 1.3上可以正常使用,但在CakePHP 2.x上则无法使用,还尝试使用$this->Html = new HtmlHelper;并出现以下错误:

  

警告(4096):参数1传递给   HtmlHelper :: __ construct()必须是View的实例,未给出任何实例,   呼入   C:\ Bitnami \ wappstack-5.5.28-0 \ apache2 \ htdocs \ pokeadmin_v2 \ app \ View \ Helper \ NavHelper.php   在第11行并定义了[ CORE \ Cake \ View \ Helper \ HtmlHelper.php ,   第 161

我也检查了文档,但没有运气。

3 个答案:

答案 0 :(得分:1)

您通过两种方式破坏了构造函数,即,第一,它不接受its parent(视图和配置)所需的参数,并且它也从不调用父级,这是必需的帮助程序映射的地方初始化。

如果不需要构造函数,请不要重写它,如果需要,请确保接受必需的参数并将其传递给父构造函数。

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

另请参见 Cookbook > Views > Helpers > Using and Configuring Helpers

答案 1 :(得分:0)

刚刚发现我可以使用Router :: url来执行与$ this-> Html-> url

相同的操作

答案 2 :(得分:0)

这可能有点问题,但它可能会帮助CakePHP的新手碰巧在这里遇到这个问题;

您可以像这样直接在AppController上加载辅助程序:

namespace PluginName\Controller;

use App\Controller\AppController as BaseController;
use Cake\Http\Response;
use Cake\Http\ServerRequest;

class AppController extends BaseController
{
    public $helpers = ['PluginName.HelperName'];

    // ....
}

参考:https://book.cakephp.org/3.0/en/views/helpers.html#loading-helpers-on-the-fly