إضافة سمات CSS إلى ملصقات نموذج symfony؟
-
30-09-2019 - |
سؤال
أحاول إضافة بعض سمات CSS إلى الملصقات في sfform المخصصة ولكن لا يمكنني تحقيق ذلك.
في صفي المخصص myForm extends sfForm
, ، أقوم بإنشاء جميع حقول النص ديناميكيًا:
public function configure()
{
$widgetFixtures = array();
foreach ($fixtures as $fixture) {
$widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(
array('label' => $fixture->getTeamNameDom()),
// I would like to add something like: array('class' => $fixture->getCSS()),
array('value' => $fixture->getScore1(), 'readonly' => 'readonly')
);
}
$this->setWidgets($widgetFixtures);
}
حاولت تنسيق العرض setFormFormatterName
ولكن من دون نجاح.
ملاحظة: لا يمكنني استخدام renderLabel($value, $attributes = array())
في القالب لأنني أحصل على فئة CSS من DB (كما قد تكون قد رأيت ، يجب أن أستخدم: $ Fixture-> getCSS ()).
هل يمكن لأحد أن يلقي نوري؟
شكرا جزيلا.
المحلول
إليكم كيف قمت بحلها.
أخذت كلا الاقتراحين من جونوارد وريتشساج ووضعهما معًا:
"يجب التعامل مع هذا النوع من الأشياء في العرض/العمل."
"الوصول إلى الخيارات/السمات التي تم تمريرها إلى عنصر واجهة المستخدم نفسها."
أولاً ، أقوم بإضافة فئة CSS إلى الإدخال نفسه (حتى لو لم أستخدمها).
في صفي المخصص myForm extends sfForm
,
foreach ($fixtures as $fixture) {
$widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(
array('label' => $fixture->getTeamNameDom()),
array('value' => $fixture->getScore1(),
'readonly' => 'readonly',
'class' => $fixture->getCSS())
);
}
ثم ، في القالب ، بدلاً من الاستخدام echo $form;
, ، أضيف فئة CSS إلى الملصق كما هو موضح أدناه:
foreach ($form as $widgetId => $widget) {
...
$labelClass = $widget->getWidget()->getAttribute('class');
echo '<td>'.$widget->renderLabel(null, array('class' => $labelClass)).'</td>';
...
}
ربما ليست أفضل طريقة لحل هذه المشكلة ولكنها تعمل.
شكرا جميعا لردودكم!
نصائح أخرى
ما تحاول القيام به يبدو ممكنًا ، لكن بناء جملة الرمادي يبدو بعيدًا. جرب هذا:
$widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(
array('label' => $fixture->getTeamNameDom()),
array('class' => $fixture->getCSS()),
array('value' => $fixture->getScore1(), 'readonly' => 'readonly')
);
... أو تحقق من قسم "فئة قاعدة SFWIDGETForm" هنا: http://www.symfony-project.org/forms/1_4/en/a-widgets
يجب تمرير سمة الفصل كصفيف في المعلمة الثانية لجميع مصادر النماذج.
$this->setWidget('foo', new sfWidgetFormInputText(array(),array('class','fooclass'));
يمكنك محاولة تجاوز فئة القطعة إذا كنت ترغب في إضافة CSS إلى الملصقات - وتحديداً الطرق التي تقدم الملصق. يمكنك بعد ذلك فعل شيء مثل
$foo = new myWidgetFormInputText(array("myCSSClass" => $fixture->getCSS()));
ثم تجاوزك renderLabel()
طريقة أو ما شابه في عنصر واجهة المستخدم. ستتمكن عنصر القطعة من الوصول إلى الخيارات التي تنقلها - في المثال أعلاه myCSSClass
هو مفتاح الخيار. يمكنك بعد ذلك تطبيق قيمة الفئة هذه على ملصق القطعة.
إنه أسهل بكثير من ذلك. فقط قم بتطبيق CSS على الملصق للعلامة ...
label[for=payment_cardNumber]
{
margin-top: 20px;
color: red;
}