我在使用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
行
我也检查了文档,但没有运气。
答案 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