سؤال

لقد قمت بتثبيت sfDoctrineGuard توصيل في. كل شيء يعمل ، يمكنني استخدام/sf_guard_user/edit/: صفحة معرف لتحرير المستخدم.

لم يعجبني الطريقة التي تم بها إدراج الأذونات كقائمة محددة ، أردت عرضها مع تقسيم مربعات الاختيار الفردية بناءً على اسم الإذن. للقيام بذلك ، قمت بإنشاء عنصر واجهة مستخدم مخصصة تمتد sfWidgetFormChoice. هذا يعمل بالطريقة التي أريدها أيضًا ، لكن مشكلتي هي ما يلي:

لاستخدام عنصر واجهة المستخدم المخصصة ، قمت بتحرير الأسطر التالية في هذا الملف:

lib/form/doctrine/sfDoctrineGuardPlugin/base/BasesfGuardUserForm.class.php

قبل:

      'groups_list'      => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup')),
      'permissions_list' => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardPermission')),

بعد، بعدما:

      'groups_list'      => new sfWidgetFormDoctrineChoice(array('multiple' => true,     'model' => 'sfGuardGroup', 'expanded' => true)),
      'permissions_list' => new myCustomPermissionWidget(),

وهذا يعطي النتيجة الصحيحة.

المشكلة هي أنه لا ينبغي علي تحرير الفصل الأساسي لأن أي وقت أقوم بإنشاء طراز الخاص بي ، يتم كتابة الملف.

لذلك يجب أن أقوم بتحرير هذا الملف:

lib/form/doctrine/sfDoctrineGuardPlugin/sfGuardUserForm.class.php

    class sfGuardUserForm extends PluginsfGuardUserForm
    {
      public function configure()
      {
        parent::configure();

        $this->setWidgets(array(
          'groups_list'      => new sfWidgetFormDoctrineChoice(array('multiple' => true, 'model' => 'sfGuardGroup', 'expanded' => true)),
          'permissions_list' => new myCustomPermissionWidget(),
        ));
      }
    }

لكن هذا لا يعمل. لقد جربت الرمز داخل إعداد دالة جديد () ، مع Parent :: SETUP () قبل وبعد رمزتي ولكن لا يزال لا شيء.

PluginsFguardUserform مجردة ويمتد BasesFguardUserform ، لكنني لا أرى لماذا سيمنع ذلك من العمل.

أيه أفكار؟

شكرًا

هل كانت مفيدة؟

المحلول

أعتقد أن إجراء تحرير المستخدم يستخدم الفئة SFGuardUserAdMinform التي هي في دليل البرنامج المساعد

انسخ الملف

الإضافات/sfdoctrineguardplugin/lib/form/monstrine/sfguarduseradminform.class.php

داخل

lib/form/joctrine/

ثم أضف هذا السطر إلى طريقة التكوين ()

$ this-> setWidget ('أذونات_list' => new MyCustomPermissionWidget ()) ؛

لا تحتاج إلى إضافة مكالمة إلى Parent :: تكوين () من الممارسات السيئة القيام بذلك في إطار النموذج ويجب عليك القيام بذلك فقط إذا كنت تعلم أنك بحاجة إلى ذلك.

نصائح أخرى

حاول تحرير

LIB/PANDOR/SYMFONY/LIB/PLUCINS/SFDOCTRINEGUARDPLUGIN/LIB/FORM/MONTRINE

سيكون "البائع" و "Symfony" كل ما لديك كما في التثبيت. لقد نجح هذا الأمر بالنسبة لي عندما أردت إزالة خانة الاختيار "تذكرني" من نموذج الإشارة:

<?php

/**
 * sfGuardFormSignin for sfGuardAuth signin action
 *
 * @package    sfDoctrineGuardPlugin
 * @subpackage form
 * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
 * @version    SVN: $Id: sfGuardFormSignin.class.php 23536 2009-11-02 21:41:21Z Kris.Wallsmith $
 */
class sfGuardFormSignin extends BasesfGuardFormSignin
{
  /**
   * @see sfForm
   */
  public function configure()
  {
    $this->widgetSchema->setFormFormatterName('list');
    unset($this['remember']);
  }
}

كان بهذه البساطة.

أتمنى أن يساعد ذلك

لوقا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top