Symfony 在哪里转换原始数据?
我要开始一个新的包。它的目标是显示一些统计数组和图表。问题是我不知道在视图的数组和图表中将原始数据转换为可用数据的位置。我读了很多关于保持控制器尽可能薄的文章。据我所知,存储库是用来提取数据,而不是转换数据Symfony 在哪里转换原始数据?,symfony,transform,raw-data,Symfony,Transform,Raw Data,我要开始一个新的包。它的目标是显示一些统计数组和图表。问题是我不知道在视图的数组和图表中将原始数据转换为可用数据的位置。我读了很多关于保持控制器尽可能薄的文章。据我所知,存储库是用来提取数据,而不是转换数据 根据Symfony2最佳实践,我应该在哪里转换原始数据?这取决于您的应用程序,但根据您描述的内容,您需要定义一个服务,并在那里写入所有逻辑,以便您的控制器看起来像这样 $customService = $this->get('my_custom_service'); $data
根据Symfony2最佳实践,我应该在哪里转换原始数据?这取决于您的应用程序,但根据您描述的内容,您需要定义一个
服务
,并在那里写入所有逻辑,以便您的控制器看起来像这样
$customService = $this->get('my_custom_service');
$data = $customService->loadMyData();
阅读有关Symfony中服务的更多信息:只需创建自己的自定义服务,使用一些存储库提取数据并将其转换为可用形式 样本:
// repository
interface MyRepository {
public function findBySomething($something);
}
class MyRepositoryImpl extends EntityRepository implements MyRepository {
public function findBySomething($something) {
return $this->createQueryBuilder('a')
->where('a.sth = :sth')
->setParameter('std', $something)
->getQuery()
->getResult();
}
}
// service
interface MyService {
public function fetchSomeData();
}
class MyServiceImpl implements MyService {
/** @var MyRespostiory */
private $repo;
public function __construct(MyRepository $repo) {
$this->repo = $repo;
}
public function fetchSomeData() {
$rawData = $this->repo->findBySomething(123);
$data = [];
// do sth
return $data;
}
}
// final usage, eg. within a constructor
class MyConstructor extends Controller {
/** @var MyService */
private $myService;
public function __construct(MyService $myService) {
$this->myService = $myService;
}
public function someAction() {
// you could also get access to the service using $this->get('...')
$data = $this->myService->fetchSomeData();
return $this->render('SomeTemplate', [
'data' => $data
]);
}
}
// service declaration
<service id="myService" class="MyServiceImpl">
<argument type="service" id="doctrine.repository.my_repository" />
</service>
//存储库
接口MyRepository{
公共功能由某物(某物)找到;
}
类MyRepositoryImpl扩展EntityRepository实现MyRepository{
公共函数findBySomething($something){
返回$this->createQueryBuilder('a')
->其中('a.sth=:sth')
->setParameter('std',$something)
->getQuery()
->getResult();
}
}
//服务
接口MyService{
公共函数fetchSomeData();
}
类MyServiceImpl实现MyService{
/**@var MyRespostiory*/
私人美元回购;
公共函数构造(MyRepository$repo){
$this->repo=$repo;
}
公共函数fetchSomeData(){
$rawData=$this->repo->findBySomething(123);
$data=[];
//做某事
返回$data;
}
}
//最终用途,如在构造函数中
类MyConstructor扩展控制器{
/**@var MyService*/
私人$myService;
公共函数构造(MyService$MyService){
$this->myService=$myService;
}
公共职能行动(){
//您还可以使用$this->get(“…”)访问该服务
$data=$this->myService->fetchSomeData();
返回$this->render('SomeTemplate'[
“数据”=>$data
]);
}
}
//服务声明