2

我正在创建一个用于使用 CakePHP 登录的 REST API。我的问题是:

  1. routes.php,我要填写mapresources("xxx")什么?
  2. POST /XXX.format XXXController::add() <=这是在文档中给出的。如果我的应用程序文件夹是这样的:/localhost/FC/app/webroot/等等。我将通过它发送 JSON 格式的用户名和密码的 post 请求的 URL 是什么?目前我index.php通过键入在 webroot 中访问localhost/FC
  3. 如果我将我的控制器命名为 APIs 而不是下面的食谱,例如ApisController.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')
        ));
    }
    
    }
    
  4. 最后,如果我将 json 中的用户 ID 密码发送到此 url,我应该执行什么命令来返回 200 ok 响应?

我知道它有点多,但我真的是一个新手,即使我已经玩了 3 天并且即将筋疲力尽,我也无法掌握这个概念。请帮忙!

现在,控制器是客户:

public function login() {
           if ($this->Session->check('Customer')) {  //to check if already logged in



            $this->Session->setFlash('You are already logged in as ' . $this->Session->read('Customer.Customer.fname') . ' ' . $this->Session->read('Customer.Customer.sname'));
            $this->redirect($this->Session->read('ref'));
        } else {
            if ($this->request->is('post')||$this->request->is('ajax')) {   //receives data by ajax from popup of login


                $name = $this->request->data('name');
                $pwd = $this->request->data('pwd');
                $pwd = md5($pwd);   //hashing of password
                $customer = $this->Customer->findByEmail($name);
                if (!$customer) {
                    $msg = 'Wrong Username or password/false';
                }   
                if ($customer['Customer']['active'] == 1) {


                    $customer = $this->Customer->findByEmailAndPassword($name, $pwd);

                    if (@$customer) {
                        $this->Session->write('Customer', $customer);
                      $msg = $customer['Customer']['fname'].'/true';

                        if ($this->Session->check('order')) {
                            $msg = $this->Session->read('loc_id').'/set';

                        } 
                    } else {
                        $msg = 'Wrong Username or password/false';
                    }
                } else {
                    $msg = 'Your account in not active. Please check your mails to get the activation link/false';
                }


            }
        }
        echo $msg;
4

1 回答 1

1
  1. 如果使用名为 ApisController 的控制器,则必须使用 api 填充 mapresource。例子:Router::mapResources('api');

  2. 这些是创建的默认路由:

    • GET /apis.format RecipesController::index()
    • GET /apis/123.format RecipesController::view(123)
    • POST /apis.format RecipesController::add()
    • PUT /apis/123.format RecipesController::edit(123)
    • DELETE/apis/123.format RecipesController::delete(123)
    • POST /apis/123.format RecipesController::edit(123)

因此,如果您的主页位于:http://localhost/FC/,您可以访问 中的资源http://localhost/FC/apis.format

您必须用 json 或 xml 替换格式。如果要使用 XML 或 JSON,则必须在routes.php添加时声明它Router::parseExtensions();

  1. 您必须在 ApisController 中重命名您的控制器,并在 $this->Api 中更改每次出现的 $this->Recipe,还必须为 Api 创建一个模型并在 db 上创建一个表。对于 xml 和 json,您必须在其中创建视图/app/Views/Apis/xml/index.ctp等等。

    // app/View/Apis/xml/index.ctp // 对 $recipes 数组进行一些格式化和操作。$xml = Xml::fromArray(array('response' => $apis)); 回声 $xml->asXML();

最后一个答案,当没有错误时,您的服务器通常会回答 200。

我建议你从更简单的东西开始,然后看看 Cakephp 的约定。http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html

干得好!

于 2013-09-10T19:00:01.003 回答