Symfony 从细枝调用控制器

Symfony 从细枝调用控制器,symfony,twig,Symfony,Twig,我目前正在发现Symfony,从我的一个控制器调用函数时遇到一些问题 > class CsvController extends Controller { public function generateCsvAction(){ $conn=$this->get('database_connection') $results=$conn->query(" SELECT * FROM external_attribute; ")

我目前正在发现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;  
}

我已经在路由中设置了所有内容。yml:

export_csv:
defaults: { _controller: CampaignBundle:Controller:CsvController.php }
现在我想从一个名为index.html.twig的文件中的按钮调用它。我知道我们可以从控制器渲染一些变量和数组,但这里我直接想调用一个函数


如果您有任何想法,我们将非常欢迎

要直接从模板调用控制器:

{{ render(controller(
    'NameOfYourBundle:NameOfYourClass:NameOfYourFunction'
)) }}
如果控制器需要参数,例如:

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

您可以直接从视图执行该功能:

{% render "YourBundle:Csv:generateCsv" with { 'url': 'export_csv' } %}
通过JS和AJAX:

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

});

你能用view index.html.twig编辑你的问题吗?为什么不直接使用twig path函数呢?谢谢,但是我能从JS onclick函数调用它吗?我不确定你到底想做什么。如果您想用onclick调用控制器,您可能只需要将location.href转到所需的路由?或者你想用这个按钮在同一个页面中做一些动态的东西。在这种情况下,你必须使用ajaxWell,这就是我要做的:我有一个网页,上面有一些按钮。我想在单击时调用函数GenerateCsvAction!如果我是你,我就是这么做的:generateCsvyes我可以这么做,但我想从onClick函数调用它!我真的不知道我是否可以在JS函数中调用一些小树枝