Tonic.PHP关于拥有"/resource"和“/资源/ id"url # 39; s


Tonic.PHP on having "/resource" and "/resource/id" URL's

我试图让URL "/videoGame"运行"listAllVideoGames"方法和"/videoGame/#"(其中#是一个数字)运行"getVideoGame"方法。用"@priority"注释改变优先级,我可以使两个URL调用一个或另一个,但找不到我描述的方法。

/**
 * @uri /videoGame
 * @uri /videoGame/:id
 */
class VideoGame extends Resource{
    protected function getDao(){
        return new VideoGameDao();
    }
    /**
     * @uri /videoGame
     * @json
     * @provides application/json
     * @method GET
     */
    public function listAllVideoGames(){
        return new Response(Response::OK,$this->dao->getAllVideoGames());
    }
    /**
     * @uri /videoGame/:id
     * @json
     * @provides application/json
     * @method GET
     */
    public function getVideoGame($id){
        $vg = $this->dao->getVideoGame($id);
        if ($vg){
            return new Response(Response::OK,$vg);
        }else{
            throw new NotFoundException();
        }
    }
}

我发现这样做的唯一方法是为GET调用创建一种调度程序,如下所示:

/**
 * @uri /videoGame
 * @uri /videoGame/:id
 */
class VideoGame extends Resource{
    protected function getDao(){
        return new VideoGameDao();
    }
    /**
     * @uri /videoGame/:id
     * @provides application/json
     * @method GET
     */
    public function getVideoGames($id = 0){
        if (is_numeric($id) && $id > 0){
            return $this->getVideoGame($id);
        }else{
            return $this->getAllVideoGames();
        }
    }
    private function getVideoGame($id){
        $vg = $this->dao->getVideoGame($id);
        if ($vg){
            return new Response(Response::OK,$vg);
        }else{
            throw new NotFoundException();
        }
    }
    public function getAllVideoGames(){
        return new Response(Response::OK,$this->dao->getAllVideoGames());
    }