1

誰もそれで問題を抱えているようには見えないので、私が間違っているか、誰も試したことがない:

多くの「InfocenterArticle」を持つモデル「Infocenter」があります。関連するものを含むデータを取得するために、両方に Containable 動作を追加しました。

これは、自分で実装した「HasImageAttachment」動作を添付するまではうまくいきました。問題は、含まれているモデルで私の動作のコールバックが呼び出されないことです。

私のモデル:

class Infocenter extends AppModel {
    ...
    $actsAs = array('HasImageAttachment', 'Containable');
    $hasMany = array('InfocenterArticle');
    ...
}

class InfocenterArticle extends AppModel {
    ...
    $actsAs = array('Containable');
    $belongsTo = array('Infocenter');
    ...
}

私のコントローラーでは、次のように呼び出します。

$conditions = array('InfocenterArticle.id' => $id);
if ($this->notLoggedIn()) $conditions['InfocenterArticle.freigabe'] = 1;
$article = $this->InfocenterArticle->find('first', array(
    'contain' => array(
      'Infocenter',
      'Infocenter.InfocenterArticle' => array(
        'fields' => array('id', 'title', 'freigabe'),
        'order' => array(
          'InfocenterArticle.order_index' => 'desc',
          'InfocenterArticle.created' => 'desc',
          'InfocenterArticle.title' => 'asc'
        ),
        'conditions' => array(
          'InfocenterArticle.infocenter_id' => 'Infocenter.id'
        ),
      ),
    ),
    'conditions' => $conditions,
));

また、HasImageAttachmentBehavior::setup() メソッドが呼び出されているのに、HasImageAttachmentBehavior::afterFind() (および beforeFind()) が呼び出されていないことがわかります。ただし、Infocenter::afterFind() が呼び出され、これにより、いくつかの汚いハッキングが可能になりました。今のところは十分ですが、私はそれが嫌いです。

私は何を間違っていますか?

編集: RichardAtHome のコメントへの返信の追加情報。

1) 私の動作は、Containable が添付されていないモデルで機能します。

2) 単純な die(); を置くことで afterFind() が呼び出されないようにしました。最初の行で。スクリプトは死にません()。

3) 署名は問題ないはずです。再確認しました。

4) CakePHP 1.3 を使用しています。

ご協力いただきありがとうございます。

4

3 に答える 3

0

現在、CakePHPコアが含まれるモデル全体の動作をサポートしているとは思いません。

奇妙な包含配列がある場合、動作が誤って呼び出される可能性があるため、再帰の可能性が原因である可能性があります。

CakePHP Lighthouseプロジェクトには、関連するモデルでの動作の呼び出しに関する長い投稿があり、回避策に関するいくつかの推奨事項があります。

http://cakephp.lighthouseapp.com/projects/42648/tickets/95-afterfind-and-beforefind-callbacks-not-working-on-located-models-was-translate-behavior-should-translate- Associated-model-データ

于 2012-01-24T11:20:18.310 に答える
0

この種のシナリオに対処する方法について、広範なエントリを書きました。

CakePHP 2.x および PHP 5.4+ 用です。

収容可能な動作の代替機能

于 2013-08-20T08:36:13.000 に答える