2

かなり経験豊富なプログラマーですが、CakePHP 2.1は初めてで、マニュアルに従ってカスタムヘルパーをViewで動作させるのに苦労しています:http://book.cakephp.org/2.0/en/views/helpers.html

私は答えを見つけることができませんでした、そしてケーキの専門知識を大いに感謝します。

app / Helper / 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;

    }

}

そして、app / Controller / 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

2 に答える 2

4

正しい構文は$this->helpers[] = 'spanWrapper';、メソッド内にヘルパーをロードするとき、または$helpers代わりにパブリック配列にヘルパーを追加するときです。

于 2012-08-11T13:01:04.443 に答える
0

コントローラ全体でヘルパーを使用する場合は、:の配列にヘルパーを追加する必要があります$helpersEntriesController

class EntriesController extends AppController {

  public $helpers = array('Form', 'Html', 'Js', 'Time', 'Entries');

  /* ... */

}

アプリケーション全体でヘルパーが必要な場合はAppController、同じ方法でヘルパーを追加できます。

反対側で1つのビューでのみ必要な場合は、動的にロードすることを選択できます。HelperCollection->view()あなたの見解では、ヘルパーを初めて使用する直前に電話してください。

$this->Helpers->load('Entries');

3つの方法はすべて、CakePHPの本に非常によく記載されています。

于 2012-08-23T08:54:16.150 に答える