【问题标题】:CakePHP3 - Standalone model for arrays/JSON dataCakePHP3 - 数组/JSON 数据的独立模型
【发布时间】:2017-03-15 21:34:51
【问题描述】:

我从我的 CakePHP 项目中的 JSON 文件中检索 JSON 数据。应用主要通过 JSON 接收数据。

我目前在 CakePHP 中有一个模型(Table Model),如下:

namespace App\Model\Table;


use Cake\ORM\Table;
use Cake\Filesystem\File;
use Cake\Validation\Validator;

 class DataTable extends Table
 {

        public function getJson()
        {
            $file = new File('data.json');
            $json = $file->read(true, 'r');
            $jsonstd = json_decode($json);

            // remove STD classes
            $json2array = json_decode(json_encode($jsonstd), true);

            // return data
            return $json2array;
        }

}

如您所见,我们仍然使用 CakePHP 的 ORM,而我们只是从 JSON 文件中检索数据。如何制作基于检索 JSON 数据的独立 CakePHP 模型(不使用具有数据库连接目的的 CakePHP 的 ORM)。

【问题讨论】:

  • 题外话:这种双重解码逻辑似乎是多余的,只需在第一次调用时将数据解码为数组即可。
  • 那是因为我想从数组中删除 STD 类。
  • 是的,您应该可以通过在第一次解码调用中立即将true 传递给$assoc 参数来实现这一点。

标签: php json cakephp cakephp-3.0


【解决方案1】:

模型是一个,一个概念并且等于一个表格。显然,您在这里使用的不是关系数据库表,您根本不需要它。

阅读以下主题,您会在 Google 上找到大量相关信息

  • OOP 中的抽象
  • MVC 设计模式
  • 关注点分离 (SoC)

它们都会影响您尝试做的事情,理解它们将使您成为更好的程序员,因为您的代码将变得更好维护。


您可以在任何地方放置任何类型的课程 - 从技术上讲。好的做法是在有意义的地方进行良好的抽象和 SoC。

您要做的是进入模型层的业务逻辑和数据操作。请注意我放入的名称空间。您也可以将其放入App\Model\Json 或您想要的任何其他位置。我通常以一种有意义的方式将我的类分组到命名空间/文件夹中。

namespace App\Model;

use Cake\Filesystem\File;

 class JsonData
 {
        public static function get($file)
        {
            $file = new File($file);
            $json = $file->read(true, 'r');
            $jsonstd = json_decode($json);

            // remove STD classes
            $json2array = json_decode(json_encode($jsonstd), true);

            // return data
            return $json2array;
        }
}

// Import the class and use it
$json = JsonData::get($file);

【讨论】:

  • 感谢您的回答!我决定将班级分组为App\Model\Json。但是,我想在我的控制器中调用它。但是,CakePHP 的 loadModel() 函数无法找到模型。如何使用 CakePHP 的函数调用 Controller 中的模型?
  • 请按照我回答的第一部分建议您执行的操作。您在精神上仍然坚持模型是类/文件的概念 - 它不是。 loadModel() 是一组特定类(存储库类,哪个表是)的 定位器 包括/加载您的类,就像在配置了类加载器的命名空间环境中的任何其他类一样。见php.net/manual/en/language.namespaces.basics.php
  • stackoverflow.com/questions/42836416/… :如果您对我的问题有意见。我现在有了更好的理解。
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 2021-11-27
  • 1970-01-01
  • 2021-10-07
  • 2015-08-05
  • 1970-01-01
  • 2015-02-05
  • 2018-11-09
相关资源
最近更新 更多