2017-03-15 92 views
0

我从CakePHP项目中的JSON文件中检索JSON数据。应用程序主要通过JSON接收数据。CakePHP3 - 用于数组/ 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文件中检索数据。如何创建一个基于检索JSON数据的独立CakePHP模型(不使用CakePHP的ORM,其目的是具有数据库连接)。

+0

Offtopic:这种双重解码逻辑看起来很超级,只是在第一次调用时将数据解码为数组。 – ndm

+0

这是因为我想从数组中删除STD类。 – h0sfx0

+0

是的,你应该可以通过在第一次解码调用中立即为'$ assoc'参数传递'true'来完成一次调用。 – ndm

回答

1

模型是一个,一个概念等于。显然,你并没有使用关系数据库表,在这里你完全不需要它。

阅读有关以下主题,你会发现很多关于它的信息对谷歌

  • 抽象的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); 
+0

谢谢你的回答!我决定将该课程分组到“App \ Model \ Json”中。然而,我想在我的控制器中调用它。然而,CakePHP的'loadModel()'函数无法找到模型。我如何使用CakePHP的函数在Controller中调用模型? – h0sfx0

+0

请做我的答案的第一部分建议你做的事情。你在思想上仍然坚持一个模型是一个类/文件的概念 - **它不是**。 loadModel()是一个特定的一组类(存储库类,该表为)的* locator * 像名称空间环境中的任何其他类一样,在配置了类加载器的情况下包含/加载类。见http://php.net/manual/en/language.namespaces.basics.php – burzum

+0

https://stackoverflow.com/questions/42836416/cakephp-loading-model-in-controller:如果你有我的输入题。我现在有了更好的理解。 – h0sfx0