【问题标题】:CakePHP Helpers - Integrating helpers on helpersCakePHP Helpers - 在助手上集成助手
【发布时间】:2018-08-17 18:42:13
【问题描述】:

我在使用 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-&gt;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 行

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

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    你破坏了构造函数,在两个方面,首先它不接受its parent 所需的参数(视图和配置),它也从不调用父级,这是初始化所需帮助映射的地方.

    如果您不需要构造函数,请不要覆盖它,如果需要,请确保您接受所需的参数并将它们传递给父构造函数。

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

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

    【讨论】:

      【解决方案2】:

      刚刚发现我可以使用 Router::url 执行与 $this->Html->url 相同的操作

      【讨论】:

        【解决方案3】:

        这可能有点偏离主题,但它可能会帮助那些碰巧在这里偶然发现的 CakePHP 新手;

        您可以像这样直接在 AppController 上加载 Helpers:

        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

        【讨论】:

          猜你喜欢
          • 2012-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-15
          • 2011-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多