Symfony تجاوز الفئة Baseform Howto
-
02-10-2019 - |
سؤال
لقد قمت بتثبيت 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']);
}
}
كان بهذه البساطة.
أتمنى أن يساعد ذلك
لوقا