2017-03-15 18 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