在哪里转换原始数据?

时间:2014-07-29 06:07:21

标签: symfony transform raw-data

我正在开始一个新的捆绑。它的目标是显示一些统计数据和图表。问题是我不喜欢'知道在视图的数组和图表中将原始数据转换为可用数据的位置。我阅读了很多关于保持控制器尽可能薄的文章。据我所知,存储库旨在提取数据,而不是转换数据。

根据Symfony2的最佳实践,我应该在哪里转换我的原始数据?

2 个答案:

答案 0 :(得分:0)

这取决于您的应用程序,但根据您所描述的内容,您需要定义Service并在那里写下所有逻辑,以便您的控制器看起来像这样

$customService = $this->get('my_custom_service');
$data          = $customService->loadMyData();

详细了解Symfony中的服务:http://symfony.com/doc/current/book/service_container.html

答案 1 :(得分:0)

只需创建您自己的自定义服务,该服务使用一些存储库来提取数据并将其转换为可用的形式。

样品:

// 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>