我可以将整个cakephp网站转换为网络服务吗?

时间:2015-06-09 13:14:03

标签: cakephp-2.0

嘿,我正在使用cakephp开展项目。还有适用于Android和iPhone的应用程序。如何将我的网络代码转换为网络服务。

2 个答案:

答案 0 :(得分:1)

是的,有一种方法可以在任何版本的cakephp的Web服务中转换完整的网站。

有接下来的步骤:  1.输入“Router :: parseExtensions(”pdf“,”json“);”在路由规则之前,这行到config文件夹中的routes.php。  2.使用以下命令覆盖AppController中的“beforeRender”和“Redirect”功能:

    function beforeRender() {
        if (Configure::read("debug") == 0) {
          if ($this->name == 'CakeError') {
            $this->layout = "error";
          }
        } else {
          if ($this->name == 'CakeError') {
            $this->layout = "error";
          }
        }

        if ($this->params["ext"] == "json") {

          $paging = $requests = "";

          if (isset($this->params["paging"]) && !empty($this->params["paging"])) {
            $paging = $this->params["paging"];
          }
          $this->set(compact("paging"));

          if (isset($this->request->data) && !empty($this->request->data)) {
            $requests = $this->request->data;
          }
          $this->set(compact("requests"));

          if ($this->Session->check("Message.flash") && is_array($this->Session->read("Message.flash"))) {
            foreach ($this->Session->read("Message.flash") as $key => $value) {
              $this->set($key, $value);
            }
          }
          if (isset($this->{$this->modelClass}->validationErrors) && !empty($this->{$this->modelClass}->validationErrors)) {
            $this->set("formError", $this->{$this->modelClass}->validationErrors);
          }

          if (isset($this->viewVars["params"])) {
            unset($this->viewVars["params"]);
          }
          if (isset($this->viewVars["request"])) {
            unset($this->viewVars["request"]);
          }
          $response = $this->viewVars;

          if (!in_array($this->params["action"], $this->Auth->allowedActions) && !$this->Auth->loggedIn()) {
            $response = array("authError" => true, "message" => "Please login to access.");
          }
          $this->set(compact("response"));
          $this->set('_serialize', array("response"));
        }
      }

      public function redirect($url, $status = NULL, $exit = true) {
        if ($this->params["ext"] == "json") {

          $paging = $requests = "";

          if (isset($this->params["paging"]) && !empty($this->params["paging"])) {
            $paging = $this->params["paging"];
          }
          $this->set(compact("paging"));

          if (isset($this->request->data) && !empty($this->request->data)) {
            $requests = $this->request->data;
          }
          $this->set(compact("requests"));

          if (isset($this->{$this->modelClass}->validationErrors) && !empty($this->{$this->modelClass}->validationErrors)) {
            $this->set("formError", $this->{$this->modelClass}->validationErrors);
          }
          if (!in_array($this->params["action"], $this->Auth->allowedActions) && !$this->Auth->loggedIn()) {
            $response = array("authError" => true, "message" => "Please login to access.");
          }
          $this->set(compact("response"));
          $this->set('_serialize', array("response"));
        } else {
          parent::redirect($url, $status = NULL, $exit = true);
        }
      }

注意:如果您使用该请求检查Ajax请求是否为ajax,并且您想要响应您的ajax,则必须将响应置于“IF”状态

if (!isset($this->params["ext"])) {
           // echo json_encode($response);
           // echo "success";
           // die; 
        }

否则,您可以回复视图。

答案 1 :(得分:0)

我首先阅读this

您基本上需要修改路线。您还需要修改(序列化)控制器返回的内容。