2010-12-02 12 views

答えて

0

できません。これは、ビューの親が(これもアクセスできない)コントローラであり、コントローラが複数のモデルを持つ可能性があるためです。

ビューでモデルの名前にアクセスしようとしている場合は、何か間違っている可能性が高いか、MVCデザインパターンをまだ理解していない可能性が非常に高いです。

モデルの名前がビューに関連する1つのケースは考えられません。私はあなたが何か間違っていると主張する。

+0

ビューにモデル名を取得する唯一の方法であります名前はビューに関連しています " - cakePHPの仕組みを調べる – jason

+0

ビジュアルメニューで選択したセクションを強調表示する必要がある場合は、便利なツールです。それとも私は何かが欠けている? – vitto

+0

要素を動的にフォームを作成する必要はありますか? – user6972

3

はい、あなたのモデルにその名前を伝える必要があります。あなたのモデルに次のような関数を記述してください:

function myname(){ 
    return $this->name; 
} 

あなたのコントローラはあなたのモデルの名前を尋ねることができます。

8

が、これはモデル名にして、あなたのコントローラ名を変更する必要があり、この

Inflector::classify($this->params['controller']); 

を試してみてください。もちろん、ビューレベルからでもそれを行うことができます。コントローラで

+0

thsiが動作しない可能性がありますhttp://www.blog.zahidur.com/how-to-get-model-name-in-cakephp/コメントを読む – aWebDeveloper

+0

なぜ「私は「特異」の代わりに「分類」を使用しますか?そして、この解決策はうまく動作します。 Inflectorのドキュメントを確認してください。http://book.cakephp.org/view/1479/Class-methods – 23kulpamens

12

:ご希望の結果をachiveする

$view =& ClassRegistry::getObject('view'); 
$models = $view->params['models']; 
+0

これは部分的には真です。モデルがプラグインの一部であれば、プラグインを含む名前を返します(例えば、 'Pluginモデル)。 –

0

はこれを試してみてください

<?php $model = Inflector::camelize(Inflector::singularize($this->params['controller'])); ?> 
0

あなたはCakePHPの規約に従っている場合と、ルールでは、モデル名はコントローラ名と同じですが、コントローラ名は複数でなければならないので、Viewでコントローラ名を取得するには、次のように単純に追加します。

<?php 
$controller = $this->name 

とビューのモデル名は次のようになります。

$model = trim($controller , "s"); 

これは私がモデルの一つのケースを考えることはできません」

+0

名前を分割する必要があるかもしれません。この例を見てください: 'Territory'>' Territories'、あなたのコードでは動作しません。 –

+1

@ToniAlmeidaが正しく、代わりに 'Inflector :: singularize($ controller)'を使います。あなたのコントローラーが「s」で始まっているならば、これは奇妙な結果をもたらすかもしれません。 –

関連する問題