« アコースティックライブ♪宿題の準備 ~FlashDevelopをインストールしてみた~ »

SE勉強会レポート (2008/10/5)

SE勉強会レポート (2008/10/5)

パーマリンク 2008/10/06 20:14:27 著者: おみう
カテゴリ: SE勉強会レポート

例によって、第14回高蔵寺SE勉強会レポートです。


<宿題&コーディング品評会>
宿題の準備 ~FlashDevelopをインストールしてみた~で触れたとおり、CakePHPとFlashを連携させて何か作ろうという宿題でした。

CakeConnect 0.2というものを利用します。

まずは、CakePHP側のソースコード。

<controllers/pages_controller.php>

<?php
class PagesController extends AppController
{
    var $uses = array('Bbs');
    
    function display(){
        // 書き込み処理
        if (!empty($this->data['Bbs'])) {
            $this->Bbs->save($this->data);
        }
        
        $data = $this->Bbs->find('all');
        $this->set('data',$data);
    }
}

<views/pages/display.ctp>

<?php
foreach ($data as $i):
    echo $i['Bbs']['name'] . '(' . $i['Bbs']['message'] . ')' . "\n";
endforeach;


<データベース(テーブル名:bbs)>

create table bbs (
id serial not null primary key,
name text not null,
message text not null
);


続いては、CakeConnect側の準備。
以下のようなmxmlファイルを作ります。
CakeConnect 0.2のページにある、サンプルのアーカイブを流用すると楽です。
(長すぎて見づらいです。ごめんなさい。)

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="initApp()" width="500" height="450">
	<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import flash.display.*;
			import flash.text.*;
			import net.hogepiyo.cake.*;
			import net.hogepiyo.cake.events.*;
			
			private var server:CakeConnect;
			
			private function initApp():void {
				this.server = new CakeConnect();
				/*
					通信結果を受け取るクロージャを設定する
				*/
				this.server.fault = this.fault;
				this.server.result = this.result;
				
				/*
				    クロージャを設定しない場合
				    CakeConnectからカスタムイベントが発行されるため
				    addEventListenerで拾うこともできる。
				    
				    this.server.addEventListener(CakeResultEvent.RESULT, this.hogeHandler);
				*/
				
				/* 
					通信中に操作をロックするDisplayObjectを指定する。
					この場合、Application全体が操作不能になる。
				*/
				this.server.lock = this;
			}
			
			//SWXConnecterの場合、dataの型はString以外の可能性があるため注意
			private function result(data:String):void {
				bbs_body.text = data;
			}
			
			private function fault(data:String):void {
				Alert.show(data, "通信失敗");
			}
			
			private function run(connecter:String):void {
			    var args:Object = null;
				/*
					CakePHPのルートディレクトリと
					アクセスするコントローラを指定する。
				*/
				this.server.url = "http:// … /flash_bbs/";
				this.server.controller = "pages";
				
			    /*
			        コネクタとアクセスするアクションを指定し、
			        アクションへ渡す引数をserver.call()へ渡して通信開始
			    */
				switch(connecter) {
					case "display":
						this.server.connecter = new URLConnecter();
						this.server.action = "display";
						/*
							コネクタの設定(以下は全てデフォルト値のため、設定不要)
							
							this.server.connecter.setting = {
						        timeout: 30, //タイムアウトする秒数
								format: "text", //xml, e4xなど
								method: "POST"
							}
						*/
					
						/*
							GET or POSTでデータを送る場合
							POSTに指定するとコントローラの$this->params[form]へ、
							GETに指定するとは$this->params[url]へデータが格納される。
							
						*/
						args = {"data[Bbs][name]":  namae.text, "data[Bbs][message]": message.text}
						
						/*
							その他通信方法
							
							コントローラの$this->dataへデータを格納させる場合
    						args = {"data": "arg"}
    						
							$this->dataへCakePHPのフォーム風にデータを格納させる場合
							args = {"data[Model][column]": "arg1", "data[Model][column2]": "arg2"}
							
    						URL形式でデータを送信する場合 (/controller/action/arg1/arg2)
							※日本語は文字化けする可能性があるため注意。
							args = ["arg1", "arg2"]
						*/
						break;
				}
				this.server.call(args);
			}
			
		]]>
	</mx:Script>
	<mx:Panel width="100%" height="100%" title="FlashでBBS" horizontalAlign="center">
	<mx:Form>
	    <mx:Label text="Flashで作った簡易BBSです。" width="100%" fontSize="13" fontWeight="bold"/>
	    <mx:FormItem label="お名前" width="100%">
	        <mx:TextInput width="100%" id="namae"/>
	    </mx:FormItem>
	    <mx:FormItem label="メッセージ" width="100%">
			<mx:TextInput width="100%" id="message"/>
		</mx:FormItem>
        <mx:HBox width="100%" horizontalAlign="right">
	        <mx:Button label="送信" click="this.run('display')"/>
        </mx:HBox>
	</mx:Form>
	<mx:Text id="bbs_body">
	</mx:Text>
	</mx:Panel>
</mx:Application>

掲示板です。CakePHPが出力するテキストをFlash内に埋め込んでいます。
下の図のような感じになります。
文字化けするらしいので、日本語はできないようです。


宿題に引き続き、発表でした。
僕は準備していなくて発表できませんでした。ごめんなさい。
一応ネタ(CakePHPで作った小学校クラス会サイト)は考えていたので、次の機会には必ず発表します。

コードリーディングでは、BakeSaleのコードを読みました。
なかなか高性能です。ソースコードを理解するのが大変ですが、勉強になります。


<おまけ>
パンダちゃんの送別会のついでに、僕の誕生日パーティーを開いてもらいました。
本当にありがとうございます!
一六社の近くにある旬家亭という素敵なレストランでごちそうをいただきました。
僕は20歳になりましたので、合法的に飲酒できるようになりました。
ワインもいただきましたが、渋いです。
味覚はまだお子様のようです…

20歳になったついでに(?)、ブログの左側のプロフィールを更新しました。

この記事へのトラックバック アドレス

トラックバックURL(右クリックでURLのコピーをしてください)

フィードバックはまだありません...

コメントを残す


頂いたメールアドレスはこのサイト上には表示されません

頂いたURLは表示されます。
(改行が自動で <br /> になります)
(Name, email & website)
(ユーザに、メッセージ・フォームを通じた連絡を許可します (あなたのメール・アドレスは表示されません))
2018年11月
 << <   > >>
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Name:おみう

某国立大学文学部の学生。
英語学(生成文法など)を勉強している。

安藤裕子(歌手)と北乃きい(女優)のファンであり、安藤裕子のライブによく行っている。

子どもと遊ぶサークルに所属しているが、サークル内では「ヒゲ」(←子どもにつけられた)と呼ばれている。

サークル以上に、某予備校の模試監督員アルバイトに精を出しており、模試監督ネタがブログで連載になりつつある。

文系学生にしてはパソコンにかなり精通しており、高蔵寺SE勉強会で勉強をしている。


詳しいプロフィールを見る?

メールを送る?

検索

XMLフィード

16ブログ     powered by b2evolution