REST简单的设置

最快的办法与休息是启动和运行,将几行添加到您的路线。在app /配置php文件,发现。路由器对象特性的方法称为mapResources(),用于建立一个其他的默认路由访问您的控制器。确保mapResources()之前,是需要蛋糕。“配置”。DS。的路线。php的;和其他航线覆盖的路线。如果我们想让其他的配方数据库的访问,我们做的是这样的:
//In app/Config/routes.php...

Router::mapResources('recipes');
Router::parseExtensions();
第一行设置一个简单的默认路由REST访问方法指定所需的结果格式(如xml、json、rss)。这些路由HTTP请求方法敏感。
HTTP format	URL.format	Controller action invoked
GET	/recipes.format	RecipesController::index()
GET	/recipes/123.format	RecipesController::view(123)
POST	/recipes.format	RecipesController::add()
PUT	/recipes/123.format	RecipesController::edit(123)
DELETE	/recipes/123.format	RecipesController::delete(123)
POST	/recipes/123.format	RecipesController::edit(123)

CakePHP的路由器类使用许多不同的指标来检测所使用的HTTP方法。在这里他们的偏好:
_method POST变量
的X_HTTP_METHOD_OVERRIDE
REQUEST_METHOD头
_method POST变量有助于使用浏览器作为一个REST客户机(或任何能做的文章容易)。只有设置值的_method HTTP请求方法的名称你想效仿。
一旦路由器设置其他请求映射到特定的控制器操作,我们可以继续创建逻辑控制器动作。一个基本控制器看上去是这样的:
// Controller/RecipesController.php
class RecipesController extends AppController {

    public $components = array('RequestHandler');

    public function index() {
        $recipes = $this->Recipe->find('all');
        $this->set(array(
            'recipes' => $recipes,
            '_serialize' => array('recipes')
        ));
    }

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

    public function edit($id) {
        $this->Recipe->id = $id;
        if ($this->Recipe->save($this->request->data)) {
            $message = 'Saved';
        } else {
            $message = 'Error';
        }
        $this->set(array(
            'message' => $message,
            '_serialize' => array('message')
        ));
    }

    public function delete($id) {
        if ($this->Recipe->delete($id)) {
            $message = 'Deleted';
        } else {
            $message = 'Error';
        }
        $this->set(array(
            'message' => $message,
            '_serialize' => array('message')
        ));
    }
}

因为我们已经添加了一个叫路由器:parseExtensions(),CakePHP路由器已经准备好提供不同的视图基于不同类型的请求。因为我们正在处理其他请求,我们将使XML视图。你也可以很容易使JSON视图使用CakePHP的内置JSON和XML视图。通过使用内置的XmlView我们可以定义一个变量_serialize视图。这种特殊的视图变量用于定义视图变量XmlView应该序列化为XML。
如果我们想修改数据转换成XML之前我们不应该定义_serialize视图变量,而不是使用视图文件。我们把其他视图RecipesController内部应用程序/视图/菜谱/ xml。我们还可以使用Xml代码的Xml输出视图。这就是我们的索引视图的样子:
// app/View/Recipes/xml/index.ctp
// Do some formatting and manipulation on
// the $recipes array.
$xml = Xml::fromArray(array('response' => $recipes));
echo $xml->asXML();

当使用parseExtensions提供特定内容类型(),CakePHP自动查找视图helper类型相匹配。因为我们使用XML内容类型,没有内置的帮助,然而如果你创建一个为我们的使用在这些视图将自动被加载。
呈现XML最终会看起来是这样的:
<recipes>
    <recipe id="234" created="2008-06-13" modified="2008-06-14">
        <author id="23423" first_name="Billy" last_name="Bob"></author>
        <comment id="245" body="Yummy yummmy"></comment>
    </recipe>
    <recipe id="3247" created="2008-06-15" modified="2008-06-15">
        <author id="625" first_name="Nate" last_name="Johnson"></author>
        <comment id="654" body="This is a comment for this tasty dish."></comment>
    </recipe>
</recipes>

创建编辑操作的逻辑有点棘手,但也高不了多少。因为你提供的API输出XML,这是一个自然的选择接收XML作为输入。不要担心,RequestHandler和路由器类使事情更加容易。如果一个POST或PUT请求XML内容类型,然后输入通过CakePHP的XML类,运行和数据的数组表示分配给$ this - >请求- >数据。由于这个特性,并行处理XML和POST数据无缝:控制器或模型不需要改变代码。所有你需要应该在$ this - >请求- >数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值