В настоящее время я открываю для себя 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". Я знаю, что мы можем отображать из контроллера некоторые переменные и массив, но здесь я хочу напрямую вызвать функцию
Если у вас есть какие-то идеи, это было бы очень приятно!
Почему бы вам просто не использовать функцию Twig path()?




Чтобы напрямую вызвать контроллер из вашего шаблона:
{{ render(controller(
'NameOfYourBundle:NameOfYourClass:NameOfYourFunction'
)) }}
Если контроллеру нужны параметры (например):
{{ render(controller(
'NameOfYourBundle:NameOfYourClass:NameOfYourFunction', { 'id': 3 }
)) }}
Спасибо, но могу ли я вызвать его из функции JS onclick ()?
Я не уверен, что ты действительно хочешь делать. Если вы хотите вызвать контроллер с помощью onclick, возможно, вам просто нужно указать location.href на желаемый маршрут? Или, может быть, вы хотите сделать что-то динамическое на той же странице с помощью этой кнопки. В этом случае вам нужно использовать ajax
Что ж, вот что я пытаюсь сделать: у меня есть веб-страница с несколькими кнопками. Я хочу вызывать функцию GenerateCsvAction (), когда нажимаю на нее!
на вашем месте вот что я сделал бы: <button onclick = "pathOfYourControllerRoute"> Создать csv </button>
вы можете выполнить функцию прямо из вашего представления:
{% 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
Не могли бы вы отредактировать свой вопрос с представлением
index.html.twig?