4

我正在使用 cakephp 2.1.0

我有一个帖子控制器,它基本上创建一个帖子,其 id 为整数、标题、图像为字符串

我有一个控制器操作,它可以与允许我上传文件并创建新 Post 记录的视图一起使用。该操作称为 admin_add

这是有效的。

但是,我想公开此操作 admin_add 以便内置于 Adob​​e Flex 的桌面应用程序可以调用它。

最好我想使用 RESTful 动作。

基本上我想将此操作创建为 Web 服务。

我在网上看到的大多数教程都倾向于只读操作,例如视图和索引。

我需要向 cakephp 应用程序代码添加哪些更改?

4

3 回答 3

3

一段时间后我想通了。

假设以下设置

  • Cakephp 2.x
  • 此处的操作对匿名用户是公开的

步骤 1.由 josegonzalez安装Webservice 插件。

步骤 1.1。为 json 设置 Router::parseExtensions

步骤 1.2。将“Webservice.Webservice”添加到 PostController 的组件中

步骤 1.3。加载插件


步骤 2. 您需要为 PostController 更改以下操作

    public function add() { 
    
    if ($this->request->is('post')) {

        // create new Post -- this will grab the file from the request data
        $newPost = $this->Post->createNew($this->request->data);
    
        if ($newPost) {
            $this->Session->setFlash(__('Your Post has been saved'));
            // for normal webpage submission
            if (empty($this->request->params['ext'])) {
                $this->redirect('/');                   
            } else {        
                // for json response to Flex client 
                $result = $newPost;
                $error = null;
                $id = null;
            }
        } else {
            $this->Session->setFlash(__('Your Post could not be saved. Please, try again.'));
            // for json response for failure to create
            if (!empty($this->request->params['ext'])) {
            
                    
                    $result = null;
                    $error = 'Your Post could not be saved.';
                    $id = null;
            
            }
            
        }
        // this is for json response via Webservice.Webservice
        $this->set(compact('result', 'error', 'id'));
        
    }

    }

第 3 步。设置您的 Flex 代码,如这里答案中所述。这就是在 Flex Actionscript 中检索 JSON 响应的方式。


第 4 步。您应该期望得到一个 json 响应,其中包含 3 个变量 result、error、id 和 cake validationErrors。您可以选择按照插件中的说明将validationErrors 列入黑名单。

于 2012-06-09T07:31:50.413 回答
2

听起来您的 Cakephp 应用程序或多或少已正确设置,但稍后会出现。您现在面临的挑战是让您的 Adob​​e Flex 代码将所需的数据发布到 Cakephp 操作 url。我看到您正在使用管理员操作,因此我假设需要用户登录才能访问该操作。我知道 MINISCULE flex 代码,但是你需要在 Flex 中做的是这样的:

  1. 使用具有管理员访问权限的用户名/密码组合将 Flex POST 到您的 /user/login 页面,并将响应 cookie 和会话信息保存到变量中。使用这样的东西:

    var request:URLRequest = new URLRequest(url);
    request.method = "POST";
    request.data = variables; //variables includes username and pw
    try {           
        navigateToURL(request);
    }
    
    catch (e:Error) {
    // handle error here
    }
    
  2. 然后将 Flex POST(在请求标头中包含 cookie)以图像数据作为请求的主体(内容)发送到您的 admin/posts/action。

然后,您在 cakephp 操作中所要做的就是获取 $this->data['body'] 并将其保存到文件中。

于 2012-06-07T17:41:40.167 回答
1

在您的网站上,您可以制作一个上传文本和图像等的普通表单。

然后,无论您想从哪里上传图像,您只需发送正确的 POST 信息。

例如,如果您想完全使用来自另一台服务器的服务,您可以使用 CURL 并使用如下代码发送表单数据:

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file' => '@/folder/image.jpg'));
curl_setopt($ch, CURLOPT_URL, 'http://website.com/posts/add');
curl_exec($ch);
curl_close($ch);

我不确定 Flex 是否支持 CURL,但它应该有类似的东西。

于 2012-06-07T12:51:23.067 回答