在自定义类/子系统中使用Laravel 4模型而不依赖于类

 黄体测字_335 发布于 2023-02-04 19:08

我正在构建一个解析器系统,它将根据请求/ cronjob解析大量不同的XML/JSON提要.我使用Laravel 4.

该线程的目的是在我的上下文中使用IoC,而不是在自定义类方法中使用硬编码的模型名称

为具有XML结构的Soccer Player提供解析器的示例,如:


   
      Caio Augusto Paim do Santos
   
      

我在我的/ app文件夹中创建了一个名为/ parsers的附加目录.这些是自定义类,它们都在同一文件夹中扩展或实现自定义摘要/接口,并且基本上负责接收XML/JSON文件的路径并返回一个好的结构化PHP数组.

它们在autoload的composer.json中添加为: "app/parsers"

附加文件结构的屏幕截图在此输入图像描述

一切都很好,代码/类是可测试的,不依赖于另一个类,但这是问题所在.

查看XML示例,例如: 这是Feed俱乐部ID和Feed联盟ID,但我在数据库中有自己的ID,引用了Feed ID.

喜欢这个截图:

在此输入图像描述

所以逻辑说:转到数据库,检查联盟列表中是否有来自XML文件提供的feed_id的id.如果是,请获取它,如果没有,请创建一个新联盟并获取未来参考的ID.

这需要我在我的解析器类中使用Model,现在我知道你可以使用IoC并将模型注入到控制器中,但我不确定我是否可以对我的解析器类做同样的事情......

所以在我的解析器类中间做这样的事情:

// Try to get league and season ids from database if they already exists, if not, insert
$leagueId = DB::select('SELECT id FROM league WHERE feed_id=?', array($data['league_id']));

要么

$league = new LeagueModel();

几乎是不正确的.

现在只是为了澄清它的工作方式,我的解析器在Laravel Command类中被调用,如下所示:

/**
* Execute the console command.
*
* @return void
*/
public function fire()
{
    $this->setParser();
    $this->setStorage();
    $this->parser->parseFile($file);
}

Laravel Command类在我的控制器中被调用,如:

$stamps = $this->getStamp();
Artisan::call('command:getSoccerPlayer',array('stamps' => $stamps, 'parser_id' => Request::segment(2)));

Controller本身通过URI调用: /jobs/soccer_player/parse?type=soccer&directory=players

**您有什么建议或如何克服此问题以避免依赖性,并且在此上下文中仍然使用模型与数据库进行交互?**

PS请不要注意我的屏幕截图上的整个解析逻辑现在都在"解析"相同的方法,一旦我看到我想要它的工作/外观的全貌,我会把它分解成碎片.

感谢任何帮助!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有