4

私はcakephp 2.1.0を使用しています

私は基本的にidを整数、タイトル、画像を文字列として持つ投稿を作成する投稿コントローラーを持っています

ファイルをアップロードして新しい Post レコードを作成できるビューを操作できるコントローラー アクションがあります。アクションは admin_add と呼ばれます

これは機能しています。

ただし、このアクション admin_add を公開して、Adobe Flex で構築されたデスクトップ アプリから呼び出せるようにしたいと考えています。

できれば、RESTful アクションを使用したいと考えています。

基本的には、このアクションを Web サービスとして作成したいと考えています。

私がオンラインで見るほとんどのチュートリアルは、ビューやインデックスなどの読み取り専用アクションに関するものである傾向があります。

cakephp アプリケーションコードにどのような変更を加える必要がありますか?

4

3 に答える 3

3

私はしばらくしてそれを理解しました。

次の設定を想定

  • Cakephp 2.x
  • ここでのアクションは匿名ユーザーに公開されています

手順1.josegonzalezによってWebサービスプラグインをインストールします。

ステップ1.1。jsonのRouter::parseExtensionsをセットアップします

ステップ1.2。PostControllerのコンポーネントに「Webservice.Webservice」を追加します

ステップ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コードをセットアップします。これは、FlexActionscriptでJSON応答を取得する方法です。


ステップ4.3つの変数result、error、idで構成されるjson応答と、ケーキのvalidationErrorsが返されることを期待する必要があります。プラグインに記載されているように、validationErrorsをブラックリストに登録することもできます。

于 2012-06-09T07:31:50.413 に答える
2

Cakephpアプリは多かれ少なかれ適切に設定されているようですが、それは後で行われます。ここでの課題は、AdobeFlexコードを取得して必要なデータをCakephpアクションURLにPOSTすることです。管理者アクションを使用しているようです。そのアクションにアクセスするには、ユーザーログインが必要であると想定しています。MINISCULEフレックスコードは知っていますが、フレックスで行う必要があるのは次のようなものです。

  1. 管理者アクセス権を持つusername/pwコンボを使用して/user/ loginページにFlexPOSTを設定し、応答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を含める)を設定します。

その後、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 に答える