2017-03-15 2 views
0

내 CakePHP 프로젝트의 JSON 파일에서 JSON 데이터를 검색합니다. 응용 프로그램은 주로 JSON을 통해 데이터를받습니다.CakePHP3 - 배열/JSON 데이터에 대한 독립형 모델

나는 현재 다음과 같은 모델 CakePHP의에서 (표 모델)을 가지고 : 당신이 볼 수 있듯이 우리는 단지 JSON 파일에서 데이터를 검색하는 동안

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 모델을 만들려면 어떻게해야합니까 (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의 기능을 사용하여 컨트롤러에서 모델을 호출 할 수 있습니까? – 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

관련 문제