Làm cách nào để lấy dữ liệu từ CakePHP?

CakePHP là một framework PHP giúp xây dựng các ứng dụng web nhanh hơn và đơn giản hơn. Nó sở hữu một hệ thống giàn giáo mạnh mẽ giúp giảm thời gian phát triển khi xây dựng các hệ thống đơn giản hoặc phức tạp

CakePHP xuất hiện vào khoảng năm 2005 và được phát triển bởi Larry Masters. Nó hiện có hơn 7.000 sao trên repo Github

Vì hướng dẫn này không phải là bắt đầu với CakePHP, nên tôi cho rằng bạn đã quen với việc thiết lập CakePHP 2. ứng dụng x. Bắt đầu nào

Yêu cầu

  1. BánhPHP 2. x, tốt nhất là phiên bản 2. 8
  2. Cơ sở dữ liệu MySQL
  3. Người phát thơ. Để thử nghiệm API của chúng tôi

Chúng ta sẽ tìm hiểu cách tạo API REST cơ bản ở định dạng JSON. Một định dạng JSON điển hình trông như thế này

{
 "field":"value"
}

Chúng tôi sẽ tạo một API để tạo, đọc, cập nhật và xóa sản phẩm. Như bạn có thể biết, quy ước đặt tên bảng cơ sở dữ liệu CakePHP là số nhiều. Đối với hướng dẫn này, chúng tôi sẽ giả sử bảng của chúng tôi là “sản phẩm”. Hãy tiếp tục và tạo một bảng sản phẩm trong MySQL bằng cú pháp bên dưới

CREATE TABLE `products` [
  `id` int[11] unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar[255] DEFAULT NULL,
  `description` varchar[255] DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY [`id`],
  KEY `name` [`name`]
] ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Trong thư mục dự án của bạn, hãy chuyển đến ứng dụng/Bộ điều khiển. Tạo một tệp mới có tên ProductsController. php. Mở tệp và dán mã bên dưới


Những gì chúng tôi chỉ đơn giản làm ở đây là tuyên bố rằng ProductsController của chúng tôi kế thừa AppController chính. Bây giờ, hãy chèn API đầu tiên của chúng tôi, đây sẽ là API tạo hoặc thêm sản phẩm mới

API để tạo bản ghi mới

public function add[]{
    $this->layout = false;
    $response = array['status'=>'failed', 'message'=>'HTTP method not allowed'];
if[$this->request->is['post']]{
        
        //get data from request object
        $data = $this->request->input['json_decode', true];
        if[empty[$data]]{
            $data = $this->request->data;
        }
        
        //response if post data or form data was not passed
        $response = array['status'=>'failed', 'message'=>'Please provide form data'];
            
        if[!empty[$data]]{
            //call the model's save function
            if[$this->Product->save[$data]]{
                //return success
                $response = array['status'=>'success','message'=>'Product successfully created'];
            } else{
                $response = array['status'=>'failed', 'message'=>'Failed to save data'];
            }
        }
    }
        
    $this->response->type['application/json'];
    $this->response->body[json_encode[$response]];
    return $this->response->send[];
}

Giải thích đoạn mã trên, trước tiên chúng tôi thông báo CakePHP không sử dụng bố cục cho chức năng này. Chúng tôi đã làm điều này để chỉ nhận được phản hồi được mã hóa JSON của chúng tôi. Sau đó, chúng tôi đặt trạng thái phản hồi mặc định là không thành công. Tiếp theo, chúng tôi đã kiểm tra xem tiêu đề yêu cầu có phải là POST không. Vì chúng ta đang xử lý dữ liệu JSON, nên phương pháp nhận dữ liệu JSON trong CakePHP là sử dụng $this->request->input['json_decode', true]

Theo mặc định, mã hóa kiểu nội dung của bạn phải là application/json. Nếu đó không phải là trường hợp, chúng ta cần xử lý tình huống như vậy. Để làm điều này, chúng tôi kiểm tra xem dữ liệu trong $this->request->input['json_decode', true] có trống không. Nếu đúng như vậy, chúng tôi truy xuất dữ liệu bài đăng bằng cách gọi

CREATE TABLE `products` [
  `id` int[11] unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar[255] DEFAULT NULL,
  `description` varchar[255] DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY [`id`],
  KEY `name` [`name`]
] ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
1

Cuối cùng, chúng ta gọi chức năng lưu trên Model sản phẩm. Chúng tôi kiểm tra xem dữ liệu đã được lưu thành công hay chưa. Và đó là nó. Bạn đã tạo một API để tạo bản ghi trong cơ sở dữ liệu MySQL

Chuyển đến

CREATE TABLE `products` [
  `id` int[11] unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar[255] DEFAULT NULL,
  `description` varchar[255] DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY [`id`],
  KEY `name` [`name`]
] ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2 và tạo thư mục Sản phẩm. Trong thư mục này, tạo một tệp trống thêm. ctp Nếu bạn không làm điều này, phản hồi của bạn sẽ trả về lỗi chế độ xem bị thiếu

Mở ứng dụng Postman của bạn. Trên tab mới, dán URL tên miền của bạn. Nếu bạn đang làm việc từ máy chủ cục bộ, hãy đảm bảo rằng máy chủ của bạn đang mở và sao chép đường dẫn đến dự án của bạn. Trong trường hợp của tôi, đó là

CREATE TABLE `products` [
  `id` int[11] unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar[255] DEFAULT NULL,
  `description` varchar[255] DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY [`id`],
  KEY `name` [`name`]
] ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
3. Chúng tôi cần đảm bảo rằng đường dẫn của chúng tôi liên kết với chức năng thêm trong bộ điều khiển sản phẩm. Để thực hiện việc này, chỉ cần thêm /products/add vào URL tên miền của bạn ở trên. Sử dụng bài kiểm tra của tôi ở trên, đường dẫn đầy đủ của tôi sẽ là
CREATE TABLE `products` [
  `id` int[11] unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar[255] DEFAULT NULL,
  `description` varchar[255] DEFAULT NULL,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY [`id`],
  KEY `name` [`name`]
] ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
4. Dán phần này vào phần URL trên Người đưa thư của bạn. Thay đổi tiêu đề yêu cầu thành POST. Điều hướng đến tab nội dung, rồi đến phần 'thô'. Nhấp vào hộp thả xuống và chọn JSON[application/json]. Dán mã dưới đây

________số 8_______

Bạn sẽ nhận được phản hồi thành công. Xem hình ảnh bên dưới

API để đọc bản ghi
Hành động tiếp theo là đọc một bản ghi và xuất nó dưới dạng JSON. Để làm điều này, xem mã dưới đây

public function view[$id = null]{
    $this->layout = false;
    //set default response
    $response = array['status'=>'failed', 'message'=>'Failed to process request'];
    
    //check if ID was passed
    if[!empty[$id]]{
        
        //find data by ID
        $result = $this->Product->findById[$id];
        if[!empty[$result]]{
            $response = array['status'=>'success','data'=>$result];  
        } else {
            $response['message'] = 'Found no matching data';
        }  
    } else {
        $response['message'] = "Please provide ID";
    }
        
    $this->response->type['application/json'];
    $this->response->body[json_encode[$response]];
    return $this->response->send[];
}

Tạo chế độ xem tệp. ctp trong thư mục ứng dụng/Chế độ xem/Sản phẩm. URL yêu cầu thông số ID được chuyển. Trong trường hợp này, chúng tôi sẽ chuyển ID của sản phẩm cuối cùng mà chúng tôi đã thêm vào URL. Trong trường hợp này, chúng tôi đã không xử lý loại yêu cầu. Chúng tôi chỉ kiểm tra xem một ID đã được đặt hay chưa, nếu có, chúng tôi sẽ tra cứu nó trong cơ sở dữ liệu và trả về kết quả dưới dạng JSON

Sử dụng URL kiểm tra ở trên, URL của chúng ta sẽ trông như thế này. http. //localhost/apitest/products/view/1, trong đó 1 là ID sản phẩm. Bây giờ hãy chạy cái này trong Postman của bạn. Xem kết quả bên dưới

API để cập nhật bản ghi
Tạo tệp có tên cập nhật. ctp trong thư mục sản phẩm. Dán mã bên dưới vào Bộ điều khiển sản phẩm

public function update[]{
    //set layout as false to unset default CakePHP layout. This is to prevent our JSON response from mixing with HTML
    $this->layout = false;
    
    //set default response
    $response = array['status'=>'failed', 'message'=>'HTTP method not allowed'];
    
    //check if HTTP method is PUT
    if[$this->request->is['put']]{
        //get data from request object
        $data = $this->request->input['json_decode', true];
        if[empty[$data]]{
            $data = $this->request->data;
        }
        
        //check if product ID was provided
        if[!empty[$data['id']]]{
            
            //set the product ID to update
            $this->Product->id = $data['id'];
            if[$this->Product->save[$data]]{
                $response = array['status'=>'success','message'=>'Product successfully updated'];
            } else {
                $response['message'] = "Failed to update product";
            }
        } else {
            $response['message'] = 'Please provide product ID';
        }
    }
        
    $this->response->type['application/json'];
    $this->response->body[json_encode[$response]];
    return $this->response->send[];
}

API để xóa bản ghi

public function ajax_delete[]{
    $this->layout = false;
    
    //set default response
    $response = array['status'=>'failed', 'message'=>'HTTP method not allowed'];
    
    //check if HTTP method is DELETE
    if[$this->request->is['delete']]{
        //get data from request object
        $data = $this->request->input['json_decode', true];
        if[empty[$data]]{
            $data = $this->request->data;
        }
        
        //check if product ID was provided
        if[!empty[$data['id']]]{
            if[$this->Product->delete[$id, true]]{
                $response = array['status'=>'success','message'=>'Product successfully deleted'];
            }
        }
    }
        
    $this->response->type['application/json'];
    $this->response->body[json_encode[$response]];
    return $this->response->send[];
}

yppy. Chúng tôi đã tạo thành công một API thực hiện các chức năng CRUD. Vỗ tay cho chính mình 👍👍🤛🏾

Cảm ơn bạn đã theo dõi thông qua. Hướng dẫn tiếp theo của chúng tôi sẽ hướng dẫn cách sử dụng API CakePHP của bạn bằng jQuery. Cho đến lúc đó, hãy tiếp tục học hỏi

P. S. Bài viết này được xuất bản lần đầu trên bài viết trung bình của tôi. https. //trung bình. com/@abeltolu/build-a-rest-api-using-cakephp-2-x-in-3-minutes-1abe842ad7a1

PHPCakephpPostmanApi

Bài báo cáo

Thưởng thức bài viết này?

1

Chia sẻ

Tolulope Abel Adetula

Kỹ sư giao diện người dùng

Kỹ sư phần mềm có kinh nghiệm với niềm đam mê dành cho mọi thứ trực quan và linh hoạt với kiến ​​trúc mạnh mẽ. Tôi quan tâm đến việc xây dựng trải nghiệm người dùng phong phú và tương tác trên Web và Di động. giao diện người dùng. Javascript, TypeScript [Phản ứng,

Làm cách nào để lấy dữ liệu bảng trong CakePHP?

Bạn có thể làm điều này bằng cách sử dụng get[]. .
// Trong phương thức điều khiển hoặc bảng. // Lấy một bài viết $article = $articles->get[$id];
// Trong phương thức điều khiển hoặc bảng

Làm cách nào tôi có thể lấy dữ liệu bài đăng trong CakePHP?

Có thể truy cập các tệp đã tải lên thông qua dữ liệu nội dung yêu cầu, bằng cách sử dụng Cake\Http\ServerRequest. phương thức getData[] được mô tả ở trên. Ví dụ: một tệp từ phần tử đầu vào có thuộc tính tên là tệp đính kèm, có thể được truy cập như thế này. $attachment = $this->request->getData['attachment'];

Làm cách nào tôi có thể nhận truy vấn SQL trong CakePHP?

Nếu bạn cần chạy một truy vấn SQL trong CakePHP, tất cả những gì bạn phải làm là gọi phương thức truy vấn trên lớp mô hình CakePHP của bạn và cung cấp cho nó truy vấn SQL mà bạn muốn . .

Làm cách nào để cập nhật dữ liệu trong CakePHP 4?

Cập nhật dữ liệu . ';

Chủ Đề