我正在使用cakephp 2.1.0
我有一个Post Controller,基本上创建一个id为整数,标题,图像为字符串
的帖子我有一个控制器操作,可以使用一个视图,允许我上传文件并创建一个新的Post记录。该操作称为admin_add
这很有效。
但是,我想公开此操作admin_add,以便Adobe Flex内置的桌面应用可以调用它。
最好我想使用RESTful操作。
基本上我想将此操作创建为Web服务。
我在网上看到的大多数教程都倾向于仅用于READ的操作,例如视图和索引。
我需要对cakephp应用程序代码进行哪些更改?
答案 0 :(得分:3)
我过了一段时间才发现它。
假设以下设置
步骤1.通过josegonzalez安装Webservice Plugin。
步骤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.按照此回答here中的说明设置您的Flex代码。这是Flex Actionscript中的how you then retrieve the JSON response。
步骤4.你应该期望得到一个由3个变量result,error和id以及cake validationErrors组成的json响应。您可以选择将插件中所述的validationErrors列入黑名单。
答案 1 :(得分:2)
听起来你的Cakephp应用程序或多或少地设置得恰当,但后来才会出现。您现在面临的挑战是让您的Adobe Flex代码将所需数据发布到Cakephp操作网址。我看到你正在使用管理员操作,所以我假设需要用户登录才能访问该操作。我知道MINISCULE flex代码,但你在Flex中需要做的是:
使用具有管理员权限的用户名/ pw组合将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
}
然后将Flex POST(在请求标头中包含Cookie)添加到您的admin / posts / action中,并将图像数据作为请求的正文(内容)。
然后你必须在cakephp动作中做的就是取$ this-> data ['body']并将其保存到文件中。
答案 2 :(得分: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,但它应该有类似的东西。