2014-03-27 58 views
0

我對Slim有點新手,現在我對於如何從RESTful請求中獲取參數感到遺憾。這裏是代碼的相關部分:Slim Framework獲取REST值

//..... 

$app->get('/api/json(/:do(/:entity(/:arg+)))', 
     "\Slim\Controller\API:jsonAction"); 
// ..... 

# Controller 


<?php 
namespace Slim\Controller; 

use Slim\Slim; 


class API { 

    public function jsonAction() 
    { 
     print json_encode([ 
      "response" => "200", 
      "body" => "JSON API called" 
     ]); 

     var_dump(Slim::getInstance()->request->params('do')); 
     var_dump(Slim::getInstance()->request->params('entity')); 
     var_dump(Slim::getInstance()->request->params('arg')[0]); 
    } 
} 

輸出,當我嘗試http://localhost/index.php/api/json/kill/us/all

{ 「迴應」: 「200」, 「體」: 「JSON API名爲」} NULLNULL

該路線工作(如預期),但我不能達到$do$entity$arg[]。預期結果將是:

{ 「迴應」: 「200」, 「體」: 「JSON API名爲」} killusall

我不記得在我所看見的原始頁面Slim使用這種控制器,所以如果問題很愚蠢,請原諒。提前致謝!

回答

0

根據這些意見,有一對夫婦的方式來獲得的RESTful URI參數。 這樣做的第一種方式是指this comment, #15

#In the same controller 

public function jsonAction($do = null, $entity = null, $argv = null) 
{ 
    print json_encode([ 
     "response" => "200", 
     "body" => "JSON API called" 
    ]); 

    var_dump($do); // Output string(4) "kill" 
    var_dump($entity); // Output string(2) "us" 
    var_dump($arg[0]); // Output array(1) { [0]=> string(3) "all" } 
} 

第二種方法是根據this comment, #18

# When we define the route 
$app->get('/api/json(/:do(/:entity(/:arg+)))', 
     "\Slim\Controller\API:jsonAction")->setParams(
    array($do, $entity, $arg) 
); 

和做事,我認爲這是一個有點難看的第三條道路。再次#15評論:

$app->get('/hello(/:param)', 
    function ($do = NULL, $entity = NULL, $arg = NULL) use($app) { 
     (new \controller\sayHello($app))->index($do, $entity, $arg); 
}); 

所以基本上我會堅持到第一種方法,它是更優雅,更面向框架(它在幕後處理它)。