1

次の形式で URl に ID を渡すことviewで、データを取得できます。delete

/apis/view/id.json

使用:

public function view($id) {
        $api = $this->Api->findById($id);
        $this->set(array(
            'api' => $api,
            '_serialize' => array('api')
        ));
    }

add同様に、 andを実装したいと思いeditます。ここでは、データを Json 形式で HTTP 本文に渡し、データベースに保存/編集できます。

私はこの解決策に従うことができませんでした: CakePHP API PUT with JSON input

使い方がわかりにくかった

$data = $this->request->input('json_decode');

それを達成するために。

4

2 に答える 2

4

Add は、ドキュメントに記載されているように、.json を追加するだけで簡単に使用できます。データを投稿するURLは になり/apis.jsonます。これにより、add() メソッドに自動的にアクセスします。

json 値の電子メールとパスワードを次の形式で渡すと仮定します。{"email":"abc@def.com","password":"123456"}

public function add(){

     $data=$this->request->input('json_decode', true ); //$data stores the json 
//input. Remember, if you do not add 'true', it will not store in array format.

     $data = $this->Api->findByEmailAndPassword($data['email'],$data['password']);
//simple check to see if posted values match values in model "Api". 
         if($data) {$this->set(array(
                          'data' => $data,
              '_serialize' => array('data')));}
        else{ $this->set(array(
            'data' => "sorry",
            '_serialize' => array('data')));}

      }//  The last if else is to check if $data is true, ie. if value matches,
      // it will send the input values back in JSON response. If the email pass
      // is not found, it will return "Sorry" in json format only.

それがあなたの質問に答えることを願っています! Put も非常に似ていますが、データが存在するかどうかを確認し、存在しない場合は作成するか、既存のデータを変更します。さらに疑問がある場合は、遠慮なく質問してください:)

于 2013-09-20T15:43:42.043 に答える
1

リンクされたドキュメントで説明されているようにCakeRequest::input()、未加工の入力データを読み取り、必要に応じてそれをデコード関数に渡します。

したがって$this->request->input('json_decode')、デコードされた JSON 入力が得られます。フォーマットが Cake の規則に従っているModel場合は、単純に保存メソッドの 1 つに渡すことができます。

非常に基本的な (テストされていない) 例を次に示します。

public function add()
{
    if($this->request->is('put'))
    {
        $data = $this->request->input('json_decode', true);

        $api = $this->Api->save($data);
        $validationErrors => $this->Api->validationErrors;

        $this->set(array
        (
            'api' => $api,
            'validationErrors' => $validationErrors,
            '_serialize' => array('api', 'validationErrors')
        ));
    }
}

これにより、データの保存が試行され、保存結果と検証エラーが返されます。

入力データのフォーマットがCake の規則に従っていない場合は、それに応じて変換する必要があります。

于 2013-09-20T11:04:03.457 に答える