Ethnaをmojavi(symfony)風ディレクトリ構成にする

| | コメント(0)

Ethnaはこんな感じ。


[action] app/action/User/Group/List.php
[view] app/view/User/Group/List.php
[template] template/user/group/list.tpl

templateがひとつのディレクトリにまとまっているので、デザイナーさんがいじったりする場合は、この以下だけいじってねって言えるので便利かも。
だけど全体的にファイルの階層が深くてばらばらなところにあるので相互に編集するとき大変。

なので、mojavi風にmodule毎にaction, view, templateディレクトリを作ってその中に放り込むようにする。

これだと階層は浅くなるけど1つのディレクトリに大量のファイルができることになるかも。
その辺はトレードオフ。じんせいっていろいろタイヘン!

変更後はこんな感じ。


[action] app/modules/User/actions/GroupList.php
[template] /templates/GroupList.php
[view] /views/GroupList.php

ethnaにはmoduleの概念がないんだけど、user_group_list だったら最初の user の部分をmoduleと見なす事に。 指定がない場合は default_ をむりやりつけちゃうze
app/APPID_Controller.php



<?php

class APPID_Controller extends Ethna_Controller

{

    
// (snip)



    /* @override */

    
function getDefaultActionPath($action_name)

    {

        
$r = $this->_getPath($action_name, "actions");

        
$this->logger->log(LOG_DEBUG, "default action path [%s]", $r);

        return
$r;

    }



    
/* @override */

    
function getDefaultViewPath($forward_name)

    {

        
$r = $this->_getPath($forward_name, "views");

        
$this->logger->log(LOG_DEBUG, "default view path [%s]", $r);

        return
$r;

    }



    
/* @override */

    
function getDefaultForwardPath($forward_name)

    {

        
$r = $this->_getPath($forward_name, "templates");

        return
$r;

    }



    
/* @param string $type (actions|views|templates) */

    
function _getPath($name, $type)

    {

        if (
strpos($name, '_') === false) { // _ がない場合は default_ を付与

            
$name = "default_{$name}";

        }

        
$r = preg_replace('/_(.)/e', "'/$type/' . strtoupper('\$1')",ucfirst($name), 1);

        
$r = preg_replace('/_(.)/e', "strtoupper('\$1')", $r) . '.' . $this->getExt('php');

        return
$r;

    }

}




こんなんで動くかな!
あー、これだとtemplateの拡張子がphpになる。

[2007/02/10追記]
app/APPID_Controller.php のディレクトリを以下のようにしないとだめですね。。


var $directory = array(
'action' => 'app/modules',
'view' => 'app/modules',
'template' => 'app/modules',

カテゴリ

,
 

コメントする

このブログ記事について

このページは、が2007年2月 7日 22:51に書いたブログ記事です。

ひとつ前のブログ記事は「Ethna_Renderer_PHP.php」です。

次のブログ記事は「Ethnaのテンプレートにレイアウトをかぶせる」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。