Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP3-阵列/JSON数据的独立模型_Php_Json_Cakephp_Cakephp 3.0 - Fatal编程技术网

CakePHP3-阵列/JSON数据的独立模型

CakePHP3-阵列/JSON数据的独立模型,php,json,cakephp,cakephp-3.0,Php,Json,Cakephp,Cakephp 3.0,我从CakePHP项目中的JSON文件中检索JSON数据。应用程序主要通过JSON接收数据 我目前在CakePHP中有一个模型表模型,如下所示: namespace App\Model\Table; use Cake\ORM\Table; use Cake\Filesystem\File; use Cake\Validation\Validator; class DataTable extends Table { public function getJson()

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

我目前在CakePHP中有一个模型表模型,如下所示:

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文件检索数据。如何创建一个独立的CakePHP模型,它基于检索JSON数据,而不使用CakePHP的ORM(其目的是建立数据库连接)。

模型是一个层,一个概念,不等于一个表。显然,这里您没有使用关系数据库表,根本不需要它

阅读以下主题,你会在谷歌上找到大量关于它的信息

面向对象的抽象 MVC设计模式 关注点分离 它们都会影响到您试图做的事情,理解它们将使您成为一名更好的程序员,因为您的代码将变得更易于维护

你可以把任何种类的课程放在任何地方-技术上。好的实践是一种很好的抽象,只要它是有意义和有意义的

您要做的是进入模型层的业务逻辑和数据操作。请注意我放入的名称空间。您也可以将其放入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);

Offtopic:这种双解码逻辑似乎太棒了,只需在第一次调用中将数据解码到一个数组中。这是因为我想从数组中删除STD类。是的,通过在第一次解码调用中立即传递$assoc参数的true,您就可以在一次调用中实现这一点。谢谢您的回答!我决定将类分组为App\Model\Json。一、 但是,我想在我的控制器中调用它。但是,CakePHP的loadModel函数无法找到该模型。如何使用CakePHP函数调用控制器中的模型?请按照我回答的第一部分建议的做。您在思想上仍然坚持模型是类/文件的概念,而事实并非如此。loadModel是一组特定的类存储库类的定位器,该表与已配置类加载器的命名空间环境中的任何其他类一样,包含/加载您的类。请参阅:如果您对我的问题有任何意见。我现在有了更好的理解。