どうなるMaple

どうやら、Mapleが分岐するらしい。
Hawkさんのブログからなのですが、
今、停滞気味の開発から、いい方向に進んでくれると思いますので、個人的には賛成なのですが。


ただ、Hawkさんの考えている変更が、私たちの今開発しているものに対して
どの程度影響(改良が必要なのか)がでるのかが、気になります。


でも、こういった運営って大変そうですよね。
PEARのライブラリの一部だって、滅びていくわけですし。。。


時期Mapleが円満な運営となることを祈念しております。

スキルアップのための時間

たまには普通に日記も書いてみます。


社内のプログラマー宛に、休日の過ごし方を聞いてみました。
返ってきた答えは、休養・リフレッシュ・寝て過ごす・のんびりが多かったわけですが、
休日にスキルアップの時間を取って、勉強しているって答えはありませんでした。


私自身もなかなか、色々と出かけるところが多く、時間がとれないのですが、
その分、平日に勉強の時間をもうけて、せっせと新しい取り組みを増やしております。


勉強しないと、仕事の次のネタを考えつかないですからね。
いつまでも同じことしていたら、置いていかれます・・・
それほど、この業界は恐いと思いつつ、勉強しております。


次は、では、いつ勉強するの?ってことを聞いてみたいと思います。
社員教育って大変です。

セッションの使い方

ひさびさの更新です。
ようやく余裕がでてきました。

さて、一通りフォームを完成させることは、できるようになりました。
次にセッションの使い方です。

$_SESSIONに書き込めばいいじゃん、って意見もありますが。。。
Mapleの機能にありますので、ご紹介いたします。

まずは、アクションを2つ作ります。もちろんmapleコマンドで。

$ maple action test_session_input smarty test_session_input session_input
$ maple action test_session_display smarty test_session_display session_display

test_session_input と test_session_display の2つのアクションが完成しました。

最初のtest_session_inputで、セッション変数に値をセットして、
test_session_displayで、セッション変数より受け取り表示します。

maple.iniの設定

  • modules/test/session/input/maple.ini を編集します。
[Session]
mode = start

[Action]
session = "ref:Session"

[View]
success = "test/session/input.html"
  • modules/test/session/display/maple.ini を編集します。
[Session]
mode = start

[Action]
session = "ref:Session"

[View]
success = "test/session/display.html"

Sessionフィルターを追加して、セッションを扱えるようにします。
Actionフィルターを使って、アクション内でセッションオブジェクトを参照出来るようにしています。

Actionの設定

  • module/test/session/input/Input.php を編集します。
<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * [[機能説明]]
 *
 * @package     [[package名]]
 * @author      Your Name <mail@example.com>
 * @access      public
 */
class Session_Input
{
    var $session;
    
    /**
     * [[機能説明]]
     *
     * @access  public
     */
    function execute()
    {
        // セッション変数へ値を設定する
        $this->session->setParameter('name', 'test');
        
        return 'success';
    }
}

セッションに値をセットする場合は、setParameter(名前, 値)としてセットします。

  • module/test/session/display/Display.php を編集します。
<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * [[機能説明]]
 *
 * @package     [[package名]]
 * @author      Your Name <mail@example.com>
 * @access      public
 */
class Session_Display
{
    var $session;
    var $name;
    
    /**
     * [[機能説明]]
     *
     * @access  public
     */
    function execute()
    {
        return 'success';
    }
    
    function getName()
    {
        return $this->session->getParameter('name');
    }
}

セッションより値を取り出す場合は、getParameter(名前)で取り出すことができます。

テンプレートの設定

  • templates/session/input.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>Hello, Maple!</title>
</head>
<body>
<h1>Hello, Maple!</h1>
<a href="session_display.php">セッション表示画面へ</a>
</body>
</html>
  • templates/session/display.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>Hello, Maple!</title>
</head>
<body>
<h1>Hello, Maple!</h1>
Name:{$action.name}
</body>
</html>

さて、ここまでで準備ができました。
http://hogehoge/session/input.phpにアクセスして、セッション変数をセットし、
セッション表示画面へと移動して、セッション変数が受け取れているかを確認してみてください。

mapleコマンド(generator)の使い方

なんだかんだと、忙しい時期(秋1つ目の山)を乗り越えましたので、
また書いていきたいと思います。


さて、今までの説明では、せっせとファイルを作る形で説明してきました。
mapleには、generatorというファイル生成機能があります。それを説明したいと思います。


ver3.2より、generatorに成り代わって、mapleコマンドができました。
ここでは、mapleコマンドを使って説明していきます。
mapleコマンドを使って、お決まりのHello World!までを作ってみましょう。

アプリ用のベースディレクトリを作成します。

/home/foo/maple/ をベースディレクトリとして、作成しました。

ベースディレクトリ以下に、htdocsディレクトリと、webappディレクトリを作成します。
webappディレクトリは、mapleコマンドによって作成します。

$ mkdir htdocs
$ maple webapp
  [create]  /home/foo/maple/webapp
  [create]  /home/foo/maple/webapp/modules
  [create]  /home/foo/maple/webapp/logs
  [create]  /home/foo/maple/webapp/components
  [create]  /home/foo/maple/webapp/templates
  [create]  /home/foo/maple/webapp/templates_c
  [create]  /home/foo/maple/webapp/config
  [create]  /home/foo/maple/webapp/config/maple.inc.php
  [create]  /home/foo/maple/webapp/config/global-config.ini
  [create]  /home/foo/maple/webapp/config/base.ini
  [create]  /home/foo/maple/webapp/cache

自動的に必要なディレクトリを作成してくれます。
これでアプリケーションを作る準備は完了しました。
次は、実際に各アクション毎の設定をしていきます。

最初にアクション名を決定します。

今回の処理のアクション名は、「test_hello」とします。

webappディレクトリでmapleコマンドを実行します。

$ maple action test_hello smarty test_hello test_hello
  [create]  /home/foo/maple/webapp/modules/test/hello/Hello.class.php
  [create]  /home/foo/maple/webapp/modules/test/hello/maple.ini
  [create]  /home/foo/maple/webapp/templates/test/hello.html
  [create]  /home/foo/maple/htdocs/test_hello.php

自動的に必要なファイルを作成してくれます。


それぞれの引数の説明です。
最初の引数に応じて何かを作ります(今回はaction)
actionの場合は、アクション名 テンプレートの種類 テンプレート名 エントリポイント
となります。もちろんエントリポイント以外の_は/に置き換えられます。


さて、それぞれのファイルがどうなっているかといいますと。

  • htdocs/test_hello.php
<?php
error_reporting(E_ALL);
//error_reporting(0);

/**
 * MapleのBaseディレクトリの設定
 */
define('BASE_DIR', dirname(dirname(__FILE__)));

/**
 * Debugフィルターを発動させるかどうかの設定
 */
define('DEBUG_MODE', 0);

/**
 * Mapleの設定ファイルの読込み
 */
require_once BASE_DIR . "/webapp/config/maple.inc.php";

/**
 * このアプリの独自設定
 */
define('DEFAULT_ACTION', 'test_hello');
define('LOG_LEVEL',      LEVEL_TRACE);

/**
 * フレームワーク起動
 */
$controller =& new Controller();
$controller->execute();
?>
  • webapp/modules/test/hello/Hello.class.php
<?php

/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */

/**
 * [[機能説明]]
 *
 * @package     [[package名]]
 * @author      Your Name <mail@example.com>
 * @access      public
 */
class Test_Hello
{
    /**
     * [[機能説明]]
     *
     * @access  public
     */
    function execute()
    {
        return 'success';
    }
}
?>
  • webapp/modules/test/hello/maple.ini
;[Convert]
;*.trim =

[View]
success = "test/hello.html"
  • webapp/templates/test/hello.html
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=EUC-JP">
<title>Hello, Maple!</title>
</head>
<body>
<h1>Hello, Maple!</h1>
</body>
</html>

上記のように、Hello World(ここではMapleですが・・・)を表示するスケルトンを自動的に作ってくれます。
後は、これに必要なビジネスロジック部分を付け足していくだけですね。

これからは、このmapleコマンドを使った方法で説明していきます。

maple3.2におけるインストール作業

さて、先日maple3.2.0b1がリリースされました。
このバージョンより、インストール方法が変更されましたので、説明しておきます。

インストール作業

maple3.2よりmapleのコアファイルだけが分離されるようになりましたので、
インストール方法ならびにディレクトリ管理方法が変化しています。

ユーザが書く実装部分と、mapleの基本(コア)部分が完全分離したので、
ソース管理がわかりやすくなりました。


PEARコマンドでインストールをおこなうので、
PEARがインストールされていることが必須です。
通常は,デフォルトでインストールされます。

下記コマンドを実行します。

$ pear install http://kunit.jp/download/Maple-3.2.0b1.tgz

これで自動的にmapleがインストールされます。


この後は、Smartyを使うこと前提で書きます。。。
Smartyをインストールします。

Smartyサイトより最新版のSmartyを取得します。
最新版のSmartyを、ユーザディレクトリとかに展開します。
/home/foo/libs/Smarty-2.6.14 に展開

Smartyのlibsディレクトリに include_pathをとおせば設定完了です。

個人的には、.htaccessに書くので、下記内容で設定しています。

<IfModule mod_php4.c>
    php_value include_path .:/usr/local/lib/php:/home/foo/libs/Smarty-2.6.14/libs
</IfModule>

これでインストールは完了です。


3.1系からのバージョンアップの注意点としては、

基本的にデフォルト設定で問題はないと思います。

  • エントリポイントのdefineが2個なくなりました。
define('ACTION_KEY',     'action');
define('CONFIG_FILE',    'maple.ini');

上記2個のdefineが設定ファイル上に書かれるようになったので、エントリポイントで定義をしているとおこられます。


ディレクトリ構成が見直され、コアと実装部分が分離されたのは、便利ですので、
このバージョンをメインに開発されることをオススメします。