1

最近では、 でAppHelpers をより適切に使用する方法を考えていましたCakePHPAppHelperを使用して、必要なコンテキストに応じてリンクやその他の html 要素を一貫させることを考えました。たとえば、usersメソッドがあるためです。

$this->AppUser->profile($data, $options, $attributes);

このメソッドは、特定の css クラスを使用して、ユーザー向けにスタイル設定されたリンクを返します。おそらく次のような行です。

<a class="user female" href="http://url/profiles/username">Username</a>

私の問題は、状況によってデータの構造が異なることです。場合によっては、次のような配列があります。

$data['User']['id']
$data['User']['username']
$data['Profile']['user_id']
$data['Profile']['sex']
$data['Profile']['other']

そして、他のいくつかのケースでは、異なるクエリと異なるエンティティで、私はこれを持っています:

$data['User']['id']
$data['User']['username']
$data['User']['Profile']['user_id']
$data['User']['Profile']['sex']
$data['User']['Profile']['other']

常に同じように構造化する必要があるため、データ階層に何かが欠けているかどうかを理解したいですか?

では、常に同じ方法で構造化されたデータをヘルパーに送信する必要がありますか?

状況に応じてヘルパーにデータを解析させて、データの場所を見つける条件を付けるべきですか?

4

1 に答える 1

3

これはかなり一般的で、複数レベルの深さで関連アイテムを見つけた結果です。通常、ヘルパーにはデータを正規化するヘルパー メソッドがあります。

私は常にデータをそのままヘルパーに送信し、必要に応じてヘルパー内で再構築します。次のようになります。

function normalizeUserData($data) {
  foreach ($data['User'] as $field => $value) {
    if (is_array($value)) {
      // move it to the same level as User
      $data[$field] = $value;
      unset($data['User'][$field]);
    }
  }
}

これで、関数は常にユーザー キーと同じレベルのプロファイル データを期待できます。この関数は完全ではなく、再帰的でもありませんが、良いスタートを切ることができます。

于 2012-11-06T16:02:29.720 に答える