2015-07-16 3 views
2

Я получаю следующую полезную нагрузку от Gitlab.Доступ к данным запроса json в cakephp

{ 
    "object_kind": "push", 
    "before": "95790bf891e76fee5e1747ab589903a6a1f80f22", 
    "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", 
    "ref": "refs/heads/master", 
    "user_id": 4, 
    "user_name": "John Smith", 
    "user_email": "[email protected]", 
    "project_id": 15, 
    "repository": { 
    "name": "Diaspora", 
    "url": "[email protected]:mike/diasporadiaspora.git", 
    "description": "", 
    "homepage": "http://example.com/mike/diaspora", 
    "git_http_url":"http://example.com/mike/diaspora.git", 
    "git_ssh_url":"[email protected]:mike/diaspora.git", 
    "visibility_level":0 
    }, 
    "total_commits_count": 4 
} 

И в моей функции CakePHP, я к нему доступ, как это:

public function push() { 
      $data = $this->request->data; 
      $branch = $data['ref']; 
      $gitSshUrl = $data['repository']['git_ssh_url']; 
    } 

Я успешно смог принести поле «реф», но не поле repository.git_ssh_url.

+0

Вы сделали 'var_dump ($ данных)', чтобы увидеть, если это вложенный массив или, возможно, массив с объектами? – jeroen

+0

Нет. Если его массив с объектами, то как я могу получить доступ к ['репозиторию'] ['git_ssh_url']? – manish

ответ

0

Полезная нагрузка, которую вы получили, - это JSON (проверьте с помощью this).

Вам нужно json_decode для декодирования строки JSON.

public function push() { 
    $data = $this->request->data('Post.title'); 
    $data_array = json_decode($data,true); 
    $branch = $data_array['ref']; 
    $gitSshUrl = $data_array['repository']['git_ssh_url']; 
} 

С тортом вы также можете сделать что-то вроде

$data = $this->request->input('json_decode');  
// Gets JSON encoded data submitted to a PUT/POST action 
+0

решил проблему, на самом деле это была проблема с версией gitlab. В версии, которую я использовал, не было «git_ssh_url» – manish

Смежные вопросы