Вызов контроллера из ветки

В настоящее время я открываю для себя Symfony, и у меня возникли проблемы с вызовом функции с одного из моих контроллеров.

> class CsvController extends Controller {

public function generateCsvAction(){
    $conn=$this->get('database_connection')

    $results=$conn->query("
    SELECT *
    FROM external_attribute;
    ")

    $response=new StreamedResponse();
    $response->setCallback(function() use($results)){
        $handle=fopen("/home/basile/Documents/backend/src/CampaignBundle/Controller/test.csv","w+");
        fputcsv($handle,array('test1
            test2,
            test3,
            test4,
            test5,
            test6,
            test7,
            test8')
        ),';');
    }

    fclose($handle);
}

$response->setStatusCode(200);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8');
$response->headers->set('Content-Disposition','attachment; filename = "test.csv"');      
return $response;  

}

Я уже все установил в своем routing.yml:

export_csv:
defaults: { _controller: CampaignBundle:Controller:CsvController.php }

и теперь я хочу вызвать его с помощью кнопки в файле с именем "index.html.twig". Я знаю, что мы можем отображать из контроллера некоторые переменные и массив, но здесь я хочу напрямую вызвать функцию

Если у вас есть какие-то идеи, это было бы очень приятно!

Не могли бы вы отредактировать свой вопрос с представлением index.html.twig?

Weenesta - Mathieu Dormeval 30.03.2018 13:27

Почему бы вам просто не использовать функцию Twig path()?

AndrewShmig 02.04.2018 23:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
2
2
6 840
2

Ответы 2

Чтобы напрямую вызвать контроллер из вашего шаблона:

{{ render(controller(
    'NameOfYourBundle:NameOfYourClass:NameOfYourFunction'
)) }}

Если контроллеру нужны параметры (например):

{{ render(controller(
    'NameOfYourBundle:NameOfYourClass:NameOfYourFunction', { 'id': 3 }
)) }}

Спасибо, но могу ли я вызвать его из функции JS onclick ()?

Basile Mauvieux 30.03.2018 15:16

Я не уверен, что ты действительно хочешь делать. Если вы хотите вызвать контроллер с помощью onclick, возможно, вам просто нужно указать location.href на желаемый маршрут? Или, может быть, вы хотите сделать что-то динамическое на той же странице с помощью этой кнопки. В этом случае вам нужно использовать ajax

Guillaume Harari 30.03.2018 15:23

Что ж, вот что я пытаюсь сделать: у меня есть веб-страница с несколькими кнопками. Я хочу вызывать функцию GenerateCsvAction (), когда нажимаю на нее!

Basile Mauvieux 30.03.2018 15:38

на вашем месте вот что я сделал бы: <button onclick = "pathOfYourControllerRoute"> Создать csv </button>

Guillaume Harari 30.03.2018 15:47

вы можете выполнить функцию прямо из вашего представления:

{% render "YourBundle:Csv:generateCsv" with { 'url': 'export_csv' } %}

На JS и AJAX:

$("#button").on('click', function() { 
 $.ajax({
    url: {{render(controller("YourBundle:Csv:generateCsv")) }},
    success: function(result){
    ...
 }});

});

Да, я мог бы это сделать, но я хочу вызвать это из функции onClick ()! Я действительно не знаю, могу ли я вызвать TWIG в функции JS

Basile Mauvieux 30.03.2018 15:38

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