Я пытаюсь сделать этот хороший слайдер Bootstrap (https://github.com/seiyria/bootstrap-slider) работать на Symfony2.Symfony2 и слайдер Bootstrap
Для этого я создал пользовательский тип поля формы, следуя указаниям здесь (http://symfony.com/doc/current/cookbook/form/create_custom_field_type.html).
Так у меня есть пользовательский тип поля формы, как это:
<?php
// src/AppBundle/Form/Type/SingleSliderType.php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
class SingleSliderFormType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => array(
'0' => 0,
'1' => 20,
'2' => 40,
'3' => 60,
'4' => 80,
'5' => 100,
)
));
}
public function getParent()
{
return 'choice';
}
public function getName()
{
return 'singleslider';
}
}
Я создал fields.html.twig и это содержание:
{% block singleslider_widget -%}
<div class="input-group">
<input type="text" class='singleslider' data-slider-min="0" data-slider-max="100" data-slider-step="5" {% if value is defined %} data-slider-value="{{ value }}"{% endif %}/>
</div>
{%- endblock singleslider_widget %}
Конечно вышеперечисленное Barebone, как Я не устанавливаю реальные выборы, это было только начало видеть, если это сработало ... и это не так, поэтому я здесь.
Это то, что я делаю в типе формы, назвав его:
$builder->add($fieldName, new SingleSliderFormType(), array('label'=>'Risk', 'required' => $req, 'choices' => $percentages, 'attr'=>array('class'=>'singleslider '.$cssClass), 'label_attr'=>array('class'=>$cssClass)));
$ проценты просто массив как [ '0' => '0%', '5' => '5%' ...]
Когда я извлекаю информацию из БД, все правильно и правильно отображается на слайдере. Когда я перемещаю ползунок, пустая строка передается, поэтому она не работает.
Исходное поле (где я храню информацию) является целым числом.
Что мне не хватает?
Я также пытался заявить, что он расширяет текст вместо «выбора» в getParent(), но он жалуется, что: "The option "choices" does not exist. Known options are:..."
. Но разве это не одна из целей setDefaults, объявляющая новый тип параметра AND, устанавливающий значение по умолчанию?
Я застрял и недоумевают:/
EDIT: новая версия после комментариев.
<?php
// src/AppBundle/Form/Type/SingleSliderType.php
namespace AppBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class SingleSliderFormType extends AbstractType
{
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setOptional(array(
'choices' => array(
'0' => 0,
'1' => 20,
'2' => 40,
'3' => 60,
'4' => 80,
'5' => 100,
)
));
}
public function getParent()
{
return 'text';
}
public function getName()
{
return 'singleslider';
}
}
теперь у меня есть ошибки "Warning: Illegal offset type"
и это точка 2 стека ошибок:
at ErrorHandler ->handleError ('2', 'Illegal offset type', 'D:\provarepos\user\vendor\symfony\symfony\src\Symfony\Component\OptionsResolver\OptionsResolver.php', '337', array('optionNames' => array('choices' => array('0', '20', '40', '60', '80', '100')), 'option' => array('0', '20', '40', '60', '80', '100'), 'this' => object(OptionsResolver)))
in vendor/symfony/symfony/src/Symfony/Component/OptionsResolver/OptionsResolver.php at line 337
EDIT 2:
Успели сделать его работу путем замены setOptional
с setDefaults
.
Проблема с возвратом пустого же. Я даже пытаюсь уничтожить слайдер, и у меня есть простой текстовый объект, но когда я сохраняю форму, он не связывает значение в БД. Излишне говорить, что если я использую исходное поле выбора, он работает. Я также пытался заставить вызов сеттер для поля, указав by_reference = ложь, а затем в сущности, я сделал:
public function setRiskToleranceFlag($riskToleranceFlag)
{
$this->riskToleranceFlag = intval($riskToleranceFlag);
return $this;
}
Все без толка, как вы можете себе представить.
Предполагаю удалить функцию configureOptions (и действительно, я узнал, что он был введен в Symfony 2.7, а я на 2.6). В любом случае это дает мне «Ошибка компиляции: объявление AppBundle \ Form \ Type \ SingleSliderFormType :: setDefaultOptions() должно быть совместимо с Symfony \ Component \ Form \ FormTypeInterface :: setDefaultOptions (Symfony \ Component \ OptionsResolver \ OptionsResolverInterface $ resolver)" –
вы забыли параметр setDefaultOptions: 'setDefaultOptions (OptionsResolverInterface $ resolver)' не забудьте также использовать OptionResolverInterface в верхней части вашего файла – Med
Я забыл «использовать» сверху. Теперь у меня есть и есть новая фантастическая ошибка (см. Отредактированный вопрос). Большое вам спасибо за ваше время! –