"Slim is a PHP micro-framework" Rubyのテンプレートエンジンじゃない娘のお話です。
3系が既に出ているのですが、先方のサーバーのPHPのバージョンの関係で2系で開発をしています。今回 Ajaxのputメソッドでデータを送ったのですが、Slim側で値をとるのに少しハマったのでメモ。
Ajaxを送る側はこんな感じ
$(function () { var appAPI = { update: function(id, data) { var defer = $.Deferred(), apiPath = '/api/item/'; $.ajax({ type: 'PUT', url: apiPath + id, data: data, dataType: 'json', success: defer.resolve, error: defer.reject }); return defer.promise(); }, }; // 編集を保存する時に実行される関数 var onEdited = function(itemID) { var formData = $('#my-form').serialize(); appAPI.update(itemID, formData) .done(function(res) { // SECCESS }) .fail(function(XMLHttpRequest, status, errorThrow) { // ERROR }); return; }; });
Slimの設定
<?php require('./vendor/autoload.php'); class MyAPP { public $slim; public function __construct() { $this->slim = new \Slim\Slim(); $this->setupRouter(); } // Routing private function setupRouter() { // API $this->slim->get('/api/item/:id', array($this, 'getItemByID')); $this->slim->post('/api/item', array($this, 'insertItem')); $this->slim->put('/api/item/:id', array($this, 'updateItem')); $this->slim->delete('/api/item/:id', array($this, 'deleteItem')); } // GET public function getItemByID($id) { } // POST public function insertItem() { // Ajaxから送られてきたデータは $_POST で配列形式で取得できる $postData = $_POST; } // PUT public function updateItem($id) { // Ajaxから送られたデータ $_POST は空配列隣取得できない。 // Slimの機能を使って取得する $res = $this->slim->request(); // getBody() で取得できるデータは `id=1&name=job1&...`のような形式になる $postData = $res->getBody(); // parse_str で配列に変換する parse_str($postData, $postDataArray); } // DELETE public function deleteItem($id) { } public function run(){ $this->slim->run(); } } $myAPP = new MyApp(); $myAPP->run();
Ajax側から$form.serializeArray()
で送れば、Slim側ではjson形式で取得できるのではないか?
と思って試してみたのですが、$res->getBody()
で取得できる値は&
つなぎの文字列になっていて、json_decode()
で配列にすることはできませんでした。メソッドによって取得できる値の形式が異なるとメンドーなので、ぜんぶjson形式で取得できるのが楽なのですが...
もしかすると、Ajaxで送信するデータを自前でjson形式にしてしまうと、Slim側の$res->getBody()
で取得できる値もjson形式になるかもしれません。
- Slim Framework - Slim Framework
- GitHub - slimphp/Slim: Slim Framework source code
- Slim Framework v2
- リクエストメソッド毎のパラメータの取得 - Qiita
- PHP: parse_str - Manual
- アーティスト: ファットボーイ・スリム
- 出版社/メーカー: ソニー・ミュージックジャパンインターナショナル
- 発売日: 2007/09/19
- メディア: CD
- 購入: 1人 クリック: 9回
- この商品を含むブログ (14件) を見る