Преобразование кнопки отправки в значок

У меня есть список элементов, показываемых пользователю, и я хочу, чтобы у него была небольшая «кнопка» (на самом деле, я предпочитаю значок). Чтобы быть уверенным, что мы не сможем удалить каждый файл циклом, я хочу, чтобы форма удаляла его.

Итак, в моем действии индекса я создал форму по элементам:

/**
 * @Route("/files", name = "files")
 * @return \Symfony\Component\HttpFoundation\Response
 */

public function files() {
    $repository = $this->getDoctrine()->getRepository("App:Document");
    $files = $repository->findBy([], ["createdAt" => "DESC"]);

    $forms = [];
    foreach ($files as $file) {
        $forms[$file->getId()] = $this->createForm(DocumentRemoveType::class, $file)->createView();
    }

    return $this->render("admin/files.html.twig", [
        "files" => $files,
        "forms" => $forms
    ]);
}

Затем, в моем представлении ветки, я показываю каждую форму:

{% for file in files %}
            {# @var file \App\Entity\Document #}
        <tr>
            <th scope = "row">{{ file.name }}</th>
            <td>{{ file.createdAt|date("d/m/Y") }}</td>
            <td class = "text-center">
                <a href = "{{ vich_uploader_asset(file, 'file') }}" target = "_blank" title = "Télécharger le document"><i class = "fa fa-download"></i></a>
                {{ form_start(forms[file.id], {attr: {class: 'my-form-class'} }) }}
                    {{ form_widget(forms[file.id]) }}
                {{ form_end(forms[file.id]) }}
            </td>
        </tr>
 {% endfor %}

Тогда вот DocumentRemoveType

class DocumentRemoveType extends AbstractType
{
    private $urlGenerator;

    public function __construct(UrlGeneratorInterface $urlGenerator)
    {
        $this->urlGenerator = $urlGenerator;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add("id", HiddenType::class)
            ->setAction($this->urlGenerator->generate("admin_files_deletion"))
            ->add("removeButton", SubmitType::class);
    }
}

И, наконец, вот действие для удаления:

/**
 * @Route("/files/delete", name = "admin_files_deletion")
 * @param Request $request
 * @return \Symfony\Component\HttpFoundation\RedirectResponse
 */
public function filesDeletion(Request $request) {
    $form = $this->createForm(DocumentRemoveType::class);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $manager = $this->getDoctrine()->getManager();
        $file = $manager->find(Document::class, $manager["id"]);

        $manager->remove($file);
        $manager->flush();
    }
    return $this->redirectToRoute('admin_files');
}

Честно говоря, я не совсем уверен, иду ли я по правильному пути. На данный момент это работает, НО я хотел бы иметь небольшую пиктограмму вместо этой уродливой кнопки ввода. Ты знаешь, как мне это сделать?

Если вы заметили что-то не так в коде, не стесняйтесь замечать меня.

Вы просто спрашиваете, как сделать иконку кнопкой? Это вопрос HTML / CSS.

Magnus Eriksson 29.05.2018 14:55

Не совсем, потому что я должен использовать SubmitType, не так ли?

Alexandre 29.05.2018 15:46

Не совсем. Использовать SubmitType не обязательно. На самом деле в таких случаях рекомендуется использовать простой HTML.

Dan Costinel 29.05.2018 16:13

А что касается приведенного выше кода, это хороший способ сделать это? Итак, вы говорите, что я должен просто использовать CSS, чтобы получить то, что я хочу?

Alexandre 30.05.2018 08:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Благодаря комментариям я понял, что мне просто нужно было добавить кнопку прямо в представление:

{% for file in files %}
            {# @var file \App\Entity\Document #}
        <tr>
            <th scope = "row">{{ file.name }}</th>
            <td>{{ file.createdAt|date("d/m/Y") }}</td>
            <td class = "text-center">
                {{ form_start(forms[file.id], { "attr" : { "onsubmit" : "return confirm('Êtes-vous certain de supprimer ce document?');"}}) }}
                    <a href = "{{ vich_uploader_asset(file, 'file') }}" target = "_blank" title = "Télécharger le document"><i class = "fa fa-download"></i></a>
                    <button type = "submit" class = "buttonAsLink"><i class = "fa fa-close"></i></button>
                    {{ form_widget(forms[file.id]) }}
                {{ form_end(forms[file.id]) }}
            </td>
        </tr>
        {% endfor %}

И я удалил SubmitType в своей форме. Теперь все работает как положено.

Всем спасибо

Другие вопросы по теме