【发布时间】:2014-10-15 10:53:45
【问题描述】:
我在 OOP PHP 方面有点菜鸟,所以如果我把这听起来更复杂,请原谅我。
基本上我正在尝试清理我的控制器,因为它开始变得太杂乱了。
我已经设置了我的实体,我还创建了一个存储库,用于将一些 db 查询的方法添加到 sqlite 数据库。
但是现在我还必须在输出这些数据之前对其进行操作,我创建了一个单独的连接器类,它为每个被查询的项目获取附加信息(来自 XML Web 源),然后将其添加到学说查询数据中在被输出之前。
我可以在存储库中操作这些数据,但我添加的数据显然不是来自我的实体。因此,我创建了一个单独的模型类来添加这些数据。
如果我在正确的轨道上,请告诉我。
在我的实体存储库中,我将有一个这样的自定义方法:
public function queryTop10All()
{
$query = $this->getEntityManager($this->em)
->createQueryBuilder('u')
->select('u.ratingkey, u.origTitle, u.origTitleEp, u.episode, u.season, u.year, u.xml, count(u.title) as playCount')
->from($this->class, 'u')
->groupBy('u.title')
->orderBy('playCount', 'desc')
->addOrderBy('u.ratingkey', 'desc')
->setMaxResults(10)
->getQuery();
return $query->getResult();
}
现在我在 \Model\ChartsDataModel.php 中创建了一个新类,并使用服务将教义注入其中并调用自定义方法,获取结果,然后将来自 Web 连接器的附加数据添加到它,就像这样:
namespace PWW\DataFactoryBundle\Model;
use Doctrine\ORM\EntityManager;
use PWW\DataFactoryBundle\Connector\XMLExtractor;
use PWW\DataFactoryBundle\Connector\WebConnector;
use PWW\ContentBundle\Entity\Settings;
class ChartsDataModel {
private $settings;
private $repository;
private $em;
public function __construct(EntityManager $em)
{
$this->settings = new Settings();
$this->repository = $this->settings->getGroupingCharts() ? 'PWWDataFactoryBundle:Grouped' : 'PWWDataFactoryBundle:Processed';
$this->em = $em;
}
public function getChartsTop10All()
{
$xmlExtractor = new XMLExtractor();
$webConnector = new WebConnector();
$results = $this->em->getRepository($this->repository)->queryTop10All();
$xml = $xmlExtractor->unXmlArray($results);
$outputArray = array();
foreach($xml as $item) {
$outputArray[] = array(
"ratingKey" => $item['ratingkey'],
"origTitle" => $item['origTitle'],
"origTitleEp" => $item['origTitleEp'],
"playCount" => $item['playCount'],
"episode" => $item['episode'],
"season" => $item['season'],
"year" => $item['year'],
"type" => $item['media']['type'],
"parent" => $webConnector->getMetaData($webConnector->getMetaDataParentKey($item['ratingkey'])),
"metadata" => $webConnector->getMetaData($item['ratingkey'])
);
}
return $outputArray;
}
}
xmlExtractor 类用于提取存储在数据库字段中的某些 xml 字段作为原始 xml 转储。
我的 config.yml:
services:
pww.datafactorybundle.model.charts_data_model:
class: PWW\DataFactoryBundle\Model\ChartsDataModel
arguments: [ @doctrine.orm.entity_manager ]
然后在我的控制器中,我只是实例化一个新的 ChartsDataModel 并像这样调用方法:
namespace PWW\ContentBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
...
use PWW\DataFactoryBundle\Model\ChartsDataModel;
public function chartsAction()
{
$charts = new ChartsDataModel($this->getDoctrine()->getManager());
$top10Array = $charts->getChartsTop10All();
return $this->render('PWWContentBundle:Default:charts.html.twig', array('page' => 'charts', 'top10' => $top10Array));
}
我只想知道我这样做是否正确,有没有更好的方法(或正确的方法)?
我对 Symfony 也很陌生,并且仍然在思考它。我只是不想养成坏习惯,所以我想从一开始就做事。
我希望我解释得足够好:)
TIA
【问题讨论】: