1

Symfony 1.4 で sfGuard プラグインを使用している場合、sfGuardUserProfile フィールドでフィルタリングするにはどうすればよいですか?

標準だと思うので、名、姓などのフィールドを保持する sf_guard_user_profile テーブルを作成しました。

管理者のインデックス ページ用にかなりの数のユーザー リストがあります。ユーザー名でうまくフィルタリングできます。しかし、last_name のように、sf_guard_user_profile テーブルにあるフィールドでフィルタリングすることはできません。

私の generator.yml は次のようになります

generator:
  class: sfPropelGenerator
  param:
    model_class: sfGuardUser

    config:
      list:
        display: [=username, first_name, last_name, last_login, role]
        batch_actions: []

      filter:
        display: [username]

      form:
        class: myGuardUserAdminForm

次のように変更することで、フィールドをページのフォームに表示できます。

filter:
    class: sfGuardUserProfileFormFilter

しかし、last_name に有効な値を指定してそのフォームを送信すると、フィルタリングされません。すべてのレコードが返されます。

4

1 に答える 1

1

sfGuardUserProfileFormFilterフィルター クラスとして追加することは、first_name、last_name、およびその他のプロファイル フィールドをフィルター処理する正しい方法ではありません。

代わりに、次のようなフィルター表示リストに、フィルターする必要があるフィールドを追加する必要があります。

filter:
    display: [username, first_name, last_name]

次に、マージする必要がありsfGuardUserProfileFormFilterますsfGuardUserFormFilter

public function configure()
{
    parent::configure();

    $this->mergeForm(new sfGuardUserProfileFormFilter());
}

最後に、フィルタリングするマージされたフォームの各フィールドにsfGuardUserFormFilter関数addMyFieldColumnCriteria(Propel 表記) を追加sfGuardUserProfileFormFilterします。first_name については、次のとおりです。

    protected function addFirstNameColumnCriteria(Criteria $criteria, $field, $values)
    {
        if (!is_array($values))
            return;

        $criteria->addJoin(sfGuardUserPeer::ID, sfGuardUserProfilePeer::USER_ID, Criteria::INNER_JOIN);

        if (isset($values['is_empty']) && $values['is_empty'])
        {
            $criteria->add($field, null, Criteria::ISNULL);
            $criteria->addOr($field, '', Criteria::EQUAL);
        }
        else
        {
            $value = $values['text'];
            if ($value == '')
                return;
            $criteria->add($field, '%'.$value.'%', Criteria::LIKE);
        }
    }
于 2012-07-21T13:10:06.267 に答える