2017-11-11 110 views
0

我想爲CakePHP formHelper創建小部件。cakephp 3.x創建自定義小部件

我創建的視圖/小部件目錄中名爲ImageWidget.php一個小部件文件(因此它似乎罰款,我不知道這是否是正確的目錄,但phpstorm加載它)

<?php 
namespace App\View\Widget; 

use Cake\View\Form\ContextInterface; 
use Cake\View\Widget\WidgetInterface; 

class ImageWidget implements WidgetInterface 
{ 

    protected $_templates; 

    public function __construct($templates) 
    { 
     $this->_templates = $templates; 
    } 

    public function render(array $data, ContextInterface $context) 
    { 
     $data += [ 
      'name' => '', 
     ]; 
     return $this->_templates->format('myTestTemp', [ 
      'name' => $data['name'], 
      'attrs' => $this->_templates->formatAttributes($data, ['name']) 
     ]); 
    } 

    public function secureFields(array $data) 
    { 
     return [$data['name']]; 
    } 
} 
?> 

但我得到這個錯誤:

Cannot find template named 'myTestTemp'.

我不知道我應該在哪裏把我的模板或這是什麼模板都 (是像CakePHP的Normal模板?)

我模板文件是這樣的:

//in myTestTemp.ctp file 
<p>some html for test</p> 

我試圖把文件在這些目錄中,並沒有正常工作

  1. 的src /模板
  2. 的src /查看
  3. 的src /查看/控件

感謝

+0

您的問題缺乏問題的根源,即您定義名爲'myTestTemp'的(字符串)模板的用法的部分。 ps,wehenever一旦收到錯誤,請始終發佈** _complete_錯誤**,即**包括_full_ stacktrace **(理想情況下,從日誌中以正確可讀的方式複製它),即使問題可能存在對熟悉CakePHP的人來說是顯而易見的! – ndm

+0

對不起,我錯過了它在複製和粘貼。謝謝你的提示。 – hamidreza

回答

1

像任何其他窗口小部件,您的窗口小部件都與字符串模板一起工作,並且它依賴於在窗體幫助器中設置的模板(分別設置在正在傳遞給窗口小部件構造函數的\Cake\View\StringTemplate對象上),例如:

$this->Form->setTemplates([ 
    'myTestTemp' => '<p {{attrs}}>some html for test</p>' 
]); 

又見

+0

哇。謝啦。我不知道爲什麼它沒有穿過我的腦海 – hamidreza