Pradeep Singh
Pradeep Singh

Reputation: 1290

Can i convert whole cakephp website to web services?

Hey I m working on project in cakephp. There will also be apps for Android as well as iPhone. How can i convert my web code to web services.

Upvotes: 0

Views: 60

Answers (2)

user4990409
user4990409

Reputation:

Yes, There is a way to convert complete site in web-services of any version of cakephp.

There is step to follow: 1. Put "Router::parseExtensions("pdf", "json");" this line to your routes.php in config folder before routing rules. 2. Overwrite your "beforeRender" and "Redirect" function in AppController with following:

    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);
        }
      }

Note: If you are checking for Ajax request using that request is ajax or not, and you want to response to your ajax, you have to put your response in "IF" condition

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

Otherwise you can render your view in response.

Upvotes: 1

Guillermo Mansilla
Guillermo Mansilla

Reputation: 3889

I would start by reading this

You basically need to modify your routes. You also need to modify (serialize) what your controllers return.

Upvotes: 0

Related Questions