这是我在Stackoverflow上的第一篇文章。 我的问题涉及Symfony4 Framework。
在我的项目中,我希望从控制器中检索一些csv文件。 但是我遇到了一个我不理解的问题。
但是,让我们看看在此之前我做了什么。
composer create-project symfony/website-skeleton dash
php bin/console make:entity
=> BnkAccountOperation php bin/console doctrine:migrations:migrate
php bin/console make:crud
到目前为止一切都很好。视图和表单有效,但我想用csv文件检索我的数据。
我在 BnkAccountOperationController 中构建了以下函数(我知道有更简单,更好,更通用的方法,但目前还不错):
控制器 - BnkAccountOperationController.php 文件头:
<?php
namespace App\Controller;
use App\Entity\BnkAccountOperation;
use App\Form\BnkAccountOperationType;
use App\Repository\BnkAccountOperationRepository;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/bnk/account/operation")
*/
class BnkAccountOperationController extends Controller
{
控制器功能 - exportcsv():
/**
*
* @Route("/raw.csv")
*/
public function exportcsv()
{
$repository = $this->getDoctrine()->getManager()->getRepository(BnkAccountOperation::class);
$operations = $repository->findAll();
$rows = array();
foreach ($operations as $operation)
{
$data = array(
$operation->getOpDate()->format('d-m-Y'),
$operation->getOpType(),
$operation->getOpCategory(),
$operation->getOpLabel(),
$operation->getOpValue()
);
$rows[] = implode(',', $data);
}
$content = implode("\n", $rows);
$response = new Response($content);
$filename = "raw.csv";
$response->setStatusCode(200);
$response->headers->set('Content-Type', 'text/csv; charset=utf-8', 'application/force-download');
$response->headers->set('Content-Disposition','attachment; filename='.$filename);
return $response;
}
之前输入的命令还有5个生成的CRUD函数:
function index(BnkAccountOperationRepository $bnkAccountOperationRepository): Response
public function new(Request $request): Response
public function show(BnkAccountOperation $bnkAccountOperation): Response
public function edit(Request $request, BnkAccountOperation $bnkAccountOperation): Response
public function delete(Request $request, BnkAccountOperation $bnkAccountOperation): Response
因此,如果我在第5个函数之后立即放置exportcsv()
函数,我将向我提出这个错误:
以下是项目的配置信息:
parameters:
locale: 'en'
services:
_defaults:
autowire: true
autoconfigure: true
public: false
App\:
resource: '../src/*'
exclude: '../src/{Entity,Migrations,Tests,Kernel.php}'
App\Controller\:
resource: '../src/Controller'
tags: ['controller.service_arguments']
项目中 / src 文件夹的内容
.
├── Controller
│ ├── BnkAccountOperationController.php
├── Entity
│ └── BnkAccountOperation.php
├── Form
│ └── BnkAccountOperationType.php
├── Kernel.php
├── Migrations
│ └── Version20180409113840.php
├── Repository
│ └── BnkAccountOperationRepository.php
└── Utils
我在网上进行了一些搜索,发现我必须将我的功能放在第一个(索引功能)上。 通过这样做它有效。我可以检索我的csv文件。
但是我仍然不明白为什么它不起作用,因为我的函数是在控制器上声明的最后一个。
非常感谢任何帮助理解这一点。