Symfony Форма - сортировка данных путем изменения опции сортировки в выпадающем списке - PullRequest
0 голосов
/ 14 января 2020

Прошу прощения за заголовок, но я не знаю, как его правильно определить. Я хочу, чтобы мое приложение сортировало данные (в Doctrine) в зависимости от параметра сортировки, который пользователь выбирает в раскрывающемся списке форм.

Данные, которые я упомянул выше, хранятся в моем Doctrine объекте, который я назвал им Flashcards, а объект Flashcards содержит свойства, которые должны быть отсортированы по выбору пользователя в раскрывающемся списке. Flashcards Сущность выглядит следующим образом (для простоты я дал только несколько свойств):

/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;

/**
* @ORM\ManyToOne(targetEntity="App\Entity\Words", inversedBy="flashcards")
* @ORM\JoinColumn(nullable=false)
*/
private $words;

/**
* @ORM\Column(type="datetimetz")
*/
private $creation_date;

Теперь код контроллера для формы обычный, как у Symfony Do c скажем:

// code for form inside FlashcardController
$flashcard = new Flashcards();
$form = $this->createForm(FlashcardType::class, $flashcard);

А внутри FlashcardController render () метод, который я вызываю createView () метод для $form объекта.

Код формы находится внутри класса FlashcardType и содержит код для упомянутого выше выпадающего списка и его параметры. Выглядит это так (для простоты я привел только методы):

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('sortBy', ChoiceType::class, [
            'label' => 'Sort by',
            'choices' => [
                'Date increase' => 1,
                'Date decrease' => 2,
                'Word alphabetically' => 3,
                'Word not alphabetically' => 4
            ]
        ]);
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => Flashcards::class
    ]);
}

Итак, как вы видите, в выпадающих опциях есть сортировка по: дате увеличения, дате уменьшения, слову по алфавиту, слову не по алфавиту. Пользователь выбирает один из них в поле зрения. Таким образом, манипулирование данными пользователем НЕ меняет значения этих данных , представленных свойствами. Изменение параметра сортировки в раскрывающемся списке должно изменить запрос Doctrine для сортировки по измененному пользователем значению. Я не знаю, как этого добиться в Symfony. Не могли бы вы дать мне несколько советов, как это сделать?

Заранее спасибо за ответы!

1 Ответ

0 голосов
/ 14 января 2020

Если я правильно понял, у вас есть несколько вариантов:
Первый: провод javascript / jquery, чтобы выбрать вход и отправить форму, когда пользователь изменит порядок (следует перезагрузить форму с применением фильтра, вы можете установить любой пользователь данных, использованный на предыдущей странице, использующий RequestStack для получения полей формы из запроса / запроса в зависимости от метода)
Второй: получить все отображаемые записи узлов и попытаться манипулировать порядком на основе значения select каждый время пользователь меняет значение
Скажите, если это то, что вы имели в виду, поправьте меня, и я постараюсь дать ответ

...