アプリ版:「スタンプのみでお礼する」機能のリリースについて

Zend Frameworkで、コントローラを作る単位は、どのように決めていますか?
たとえば、ユーザ管理をするとして、UserController.phpというものを作り、追加・更新・削除のアクションを作るとすると、一つのアクションに、入力・確認・実行の3画面が必要というような要求だと、コントローラのなかみがごちゃごちゃになってしまいます。
ですので、UserAddController.phpというようなコントローラを作り、inputAction,confirmAction,executeActionというようなアクションを作ろうかと考えています。
もちろん自由だとは思いますが、皆さんはどのようにしているのか教えてもらえればと思います。

A 回答 (2件)

まぁ、クラス切り方次第ですからね。



私の場合、画面の関連性や流れを1つの軸として考えます。
この軸を1つのControllerとしています。
たたとえば、「追加」という機能であれば
入力画面→確認画面→登録完了画面
と、パターン化しているわけですよね。
そういった画面の流れを 「軸」という考え方でクラス切ってます。

追加、削除、変更であれば、それぞれ別な「軸」ですので、3個のControllerを作ればよい。
ただ、これら3つに関しては、ほかの部分にも使えるものですよね
たとえば、

ユーザーの、追加、削除、変更
商品の 追加、削除、変更

などなど、「追加」「削除」「変更」それぞれ やることは同じです。
違うのは ユーザーなのか商品なのか ってだけ
ですから、追加機能用の Controllerのひとつ上の親クラスを作っておく
削除用の・・・
変更用の・・・
としておく

たとえば、
通常そのままであれば、
class useraddController extends Zend_Controller_Action
{
~中略~
}

となりますが、
addControllerBase というように、「追加」という機能に限定したクラスを作っておいて、
class addControllerBase extends Zend_Controller_Action
{
~中略~
}

各、末端のコントローラーでは
class useraddController extends addControllerBase
{
~中略~
}
とか、
class productaddController extends addControllerBase
{
~中略~
}

みたいにしておくと、便利っすよ。

Zend frameworkってまだ出て間もないし、中身的にはちょっと汚い部分もあります。
さらに、未完成な状態だと私は思います。
こういったベースとなるコントローラーを作ってあげたり、
DB関連のマネージャークラスをつくってあげたり、
ほかにも、dao関連とか、model関連を作ってあげたり
と、手を入れてやることでそれなりに快適に使える状態となります。


//mapleは嫌いでは無いですが。
//php4をベースとして書かれているのでphp5のプロジェクトだと なにかと面倒・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お礼が遅くなりましたが、この間、いろいろ、親クラスのつくりを研究していました。
inu2さんの言うように、各段に使いやすくなりました。
ありがとうございました。

お礼日時:2008/06/05 11:42

>追加・更新・削除のアクションを作る


Zend Frameworkを使用してコンテンツを作る際、actionで切り分けられるのは「画面」です。
追加削除などの分類は「機能」であり、機能はactionで分けるよりもcontrollerで分けるのが自然です。
なので、
>UserAddController.phpというようなコントローラを作り、(snip)
といったようにするのは とても良いことであると当方は思います。
つか当方が作るならそうします。^^;

// 私見だけどZend Frameworkはかなり使い辛い(追い辛い)と思う(:>^
// mapleいいよmaple
    • good
    • 0
この回答へのお礼

あー。やっぱりそうなのですね。
機能ごとに分けていたら、なんだか、違和感を感じてしました。
もしかしたら、画面ごとじゃないのかな・・・と思って質問したのですが、すっきりしました。

mapleですか?初めて聞きました。
ちょっと調べてみましたが・・・。
「あーそうそう、そうなんだよねぇ」とかゆい所に手が届くてきな内容ですね。興味がわいてきました。

お礼日時:2008/05/22 11:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!