複数のアプリケーションを設置する場合について

このQ&Aのポイント
  • 複数のアプリケーションを設置する際、適切なファイル構成は何か?
  • コントローラ毎に分けるか、モジュール毎に分けるか、その他の方法は?
  • アプリケーションを自然に分けるためのアドバイスを教えてください。
回答を見る
  • ベストアンサー

複数のアプリケーションを設置する場合について

例えばフレームワークなどを利用して、掲示板やブログなどの複数のアプリケーション作成する場合に、 どのような区分けというかファイル構成が良いのでしょうか? コントローラ毎に分ける場合 ┬ project │└ app │ ├ controllers │ │└ bbsController.php(ここにwriteアクションやdeleteアクションなどを置く) │ │└ blogController.php モジュール毎に分ける場合 ┬ project │└ app │ ├ modules │ │└ bbs │ │ ├ controllers │ │ │└ indexController.php(トップページや表示関係) │ │ │└ ~Controller.php(他にどういうコントローラの種類が必要なのか分かりませんが・・・) その他にも アプリケーション毎に分ける場合(これもどういうファイル構成(どういうコントローラ分け)にしたら良いか分かりませんが・・・) プロジェクト毎に分ける場合 など、どの粒度に分けるのが自然(自分ならこうするとか)なのかアドバイス頂けないでしょうか?

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

お久しぶりです。 module単位で分けておくと後々便利かなと思います。 掲示板であれば、 ・フロントのユーザが見るページ(IndexController) ・スパムチェックだとか管理者がいじる設定ページ(AdminController) とかといった内容。 ブログも似たような感じでしょうか。 さらに、module間を出来るだけ疎結合にしておけば、後でそのモジュールのみ別のシステムに組み込む、ということも出来ると思います。 例えば、ブログのAdminControllerにも、掲示板のAdminControllerにもloginページを用意しておいて、 設定ファイルか何かで、統括的に管理するコントローラがあることを知らせた場合は、 <?php public function login(){ if(設定ファイルに別コントローラで統括管理すると設定されていた場合は){ $this->_redirect('/main/login'); } } ?> みたいな感じでメインのコントローラにリダイレクトさせちゃったりすれば、統合出来、 その設定ファイルがなければ単独で動かせる、というような感じで。

takagoo100
質問者

お礼

ご回答ありがとうございます。 すいません、少し本題からそれてしまうかもしれませんが、 簡単な構成のサイト(メニュー構成は、トップ、about、掲示板、ブログ、お問い合わせ、など)を作ってみようとしたのですが、 どこまでをPHPなどのプログラムで作成していけば良いのか悩んでいます・・・ 例えばトップページやaboutなどはHTML(つまりindex.htmlやabout.html)だけで作って プログラムが含まれるページ(掲示板、ブログ、お問い合わせ)などはフレームワークなどのPHPを 利用してページを表示させる(つまりZendなどのurl表記だと~.com/about/ みたいな)感じが良いのかなぁとか、 それともYouTube(http://www.youtube.com)のように(?)トップからなにから全部PHPなどの プログラムで構成されたサイトの方が作る方としてはすっきりするし、 パンくずリストなども結局PHPなどのプログラムで制御しないとできないですよね?というのもあり、 こちらの方がいいのかなぁと思ったり。。 ちょっとこの説明の仕方^^;だとhogehoge78さんに伝わるかは心配なのですが、 この点についてもアドバイス頂けないでしょうか? 本題の質問ですが、確認なのですが、 module単位で分けるとして、他のアプリケーションなどから利用する場合に その作成したmodule(例えば掲示板モジュール)というのは一切変更しないわけですよね? 例えば、一般的にライブラリとかフレームワークは他から利用するときに 基本的にそのプログラムを改造したりしませんよね。それと同じイメージなのですが。 というのも、自分のモジュールに対する考え方があいまいな部分があって、 hogehoge78さんの仰る設定ファイルというのは、利用する側に設置する設定ファイルであって それをモジュール側で読みに行くわけですよね? そうだとすると、例えば掲示板モジュールで(利用する側で)柔軟なことを実現しようとすると 掲示板モジュールはかなり複雑なプログラムになりませんか?(自分としてはそういうのを作るのが好きなので構いませんが^^) 例えるなら、掲示板はそんな難しくないけどレンタル掲示板は難しいみたいな。。。 いろいろ聞きたいことが溜まってまして^^一気に聞いて申し訳ないのですが、アドバイスをお願いします。

その他の回答 (2)

回答No.3

wordpressを引き合いに出したのは、単純にそういうやり方もある、ということの紹介です。 wordpressは、PHPフレームワークよりも一階層上のレイヤーに乗っかっているフレームワークで、 wordpressが提供しているAPIに合わせれば、簡単にアプリケーションの機能を増やせる、ということです。 ですので、もし機能をモジュール単位にするのであれば、ZendFrameworkにて、大枠のCMを作ってやって、 それに合わせる形で機能を作っていったら、簡単に機能を増やせるような実装もできるわけで。 そういう意味で、そのwordpressというフレームワークの手法ということが何かしらの実装のヒントになるのではないかなと思い、紹介しました。 それとは別に、これからCMSのようなものを実装するということで、モジュールという単位を使用する、ということであれば、 単体でも動くし、CMSにプラグインという形式で載せれば、上手く結合出来るような作り方をしたら面白いのではないかなと伝えたかったんですが、わかりづらかったですね。 尚、モジュールの単位考え方なんですが、 モジュールは、ライブラリとしての単位というよりも、「Webアプリケーション」としての単位として、 1つの塊があるという考え方かなと思います。 今回私が言っていることは、自前で実装した掲示板に対して追加処理を行う(または継承してつかう)掲示板を作るのではなくて、モジュール単体でも動くし、大枠のCMSを作ったとして、それにプラグインのような形で上手く管理画面側をくっつけることでも動作する、ということを想定していました。

takagoo100
質問者

お礼

ご回答ありがとうございます。 たしかに自分の考えてたやり方だと無理がありそうな気がしますね。。。 なんとなくですが仰ることのイメージはできてきたのですが、 はっきりと理解する(作成する)まで時間がかかりそうなので、 ここで一旦質問を終わりたいと思います。 参考になりました。ありがとうございます。

回答No.2

■静的ページの扱いに関して ヘッダやフッタ部分、サイドナビゲーション部分というのはどのページでも大体共通になると思います。 HTMLデザインを大量に作成してみればわかりますが、フッタの一箇所に、後からトラッキング用のタグを埋めたい といった話が出てきた場合、単純なHTMLで作成すると、全ページ更新していかなければいけないわけです。 それであれば、Zend_Layoutなどテンプレートシステムを使って、一括で管理できたほうが楽です。 そうするとたかだか会社概要のような固定ページにたいして負荷が気になりますが、Pear::Cache_Liteのような、ページキャッシュを上手に使って、サーバ負荷もへらしていけば良いのではないかなと思います。 結論として、Zend_Frameworkで作るなら、基本的に全部Zend_Frameworkで作ったほうが良いのかなと思います。 ■モジュールに関して つまり、Zend_Frameworkを使っていれば、application.iniあたりに設定が出来ると思うので、 そこにフラグだけ建てるようなものを用意すれば良いのかなと。 [application.ini] bbs.standalone = "false" bbs.logout_callback = "example/login" とかというような。 一番上のbbs.standalone、コレがtrueの時は、loginメソッド(ページ)が有効になるような作りにして、 bbs.logout_callbackで、ログアウトボタンが押された時にどこのlogin画面にリダイレクトさせるか設定してみたり。 >掲示板モジュールで(利用する側で)柔軟なことを実現しようとすると掲示板モジュールはかなり複雑なプログラムになりませんか? 仰るとおりで、汎用性を考えるとプログラムがかなり面倒なことになります。が、のちのち使いやすくするために今面倒なことをしておくと考えれば・・・ ■その他 ただ、今回の掲示板、静的ページ、ブログ、ぐらいしか実装しないということであれば、一度wordpressなどのCMSをインストールして弄ってみるのも新鮮で面白いと思いますよ。 プラグイン(モジュールのようなもの)や、テーマ(レイアウトに使用するテンプレート)を開発することで、基本のCMSの管理画面を拡張したり出来るので、効率もいいです。 また、管理画面の出来の良さや、設置の簡単さにも結構びっくりします。 また、いじっていると自分でCMS作るにあたってのモジュールと基礎実装のCMSのうまい切り分け方とかのヒントにもなるかもしれません。 是非、ローカルの開発環境にでも。 ※モダンなフレームワークをいじった後にwordpressをいじると、若干いらっとすることもありますが。

takagoo100
質問者

お礼

ご回答ありがとうございます。 早速wordpressを使ってみました。 要はこれってモジュールという機能をそれを理由するユーザーにとってより便利(楽)に しようとすると、新たにPHPなどのプログラムで書く部分ってこれぐらい少なくなるということですよね? 自分がモジュールに対してイメージしてたのは、例えば モジュール側をbbsmodule【掲示板プログラムの便利な部品群】(確認なのですが、hogehoge78さんが仰る[application.ini]ってこちら側に設置してある[application.ini]ですよね?) それを利用する側をbbsuser【主の掲示板プログラム(bbsmoduleを利用する側)】 とすると、URLでいうとbbsuserが主で http://localhost/bbsuser/(掲示板のトップページ) http://localhost/bbsuser/post/(掲示板の投稿フォームページ) という感じで利用するユーザーが新たに作ったbbsuserを基本的にURLで進んでいく感じで、 そこでbbsmoduleに利用できそうなページがあったら http://localhost/bbsmodule/admin/comment_delete/ みたいなZendフレームワークでいうモジュールを置いてある場所のURLになるわけです。 例えば基本的に管理者画面内のデザインなんてどうでもいいというか コメントというデータを削除さえできればよく、それって共通な処理にし易いですよね? ってな感じで、あくまでもURL的な意味でもbbsuserが主で、徐々にbbsmoduleで共通化できそうな処理を 増やしていくイメージを想像してたのですが、wordpressってそれとは少しというか違うような印象なのですが。。どうなんでしょう。 すいません、毎回自分の漠然とした分かり難い^^;説明で申し訳ないのですが、 hogehoge78さんのイメージしてるモジュールは上のような説明の内容と同じでしょうか?

関連するQ&A

  • 1つのサーバで複数のドメイン管理

    AWS EC2を使ってウェブサーバを構築し、CakePHPをインストールしてウェブサイトを実装しております。 すでにドメインを2つ取得しており、それぞれのドメインでアクセスした際に、同じディレクトリにある2つのコントローラをそれぞれ実行させてページを表示させたいと思っております。 ドメイン(例) hoge.com fuga.com コントローラ(例) /lib/app/controllers/hoge_controller.php /lib/app/controllers/fuga_controller.php hoge.comに対しては、 routes.phpで Router::connect('/', array('controller' => 'hoge', 'action' => 'index')); と設定して hoge.comでアクセスした際にhogeコントローラのindexアクションが実行されるようにできましたが、この状態を維持しつつfuga.comでアクセスした際にfugaコントローラのindexアクションが実行されるようにできればと思っております。 cakephpやサーバの設定等は自由に行える環境ですので、cakephpのrouterやサーバのバーチャルホストの設定等で実現できますでしょうか。 お分かりいただける方いらっしゃいましたら、ご教授いただけますと幸いです。 以上、よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 例えば、掲示板(bbs)モジュールがあったとして

    例えば、掲示板(bbs)モジュールがあったとして 複数のアプリケーションから利用できるとします。 ┬ myproject │├ application1 ││├ controllers │││└ helpers ││├ models ││├ views │││└ scripts │├ application2 ││├ controllers │││└ helpers ││├ models ││├ views │││└ scripts │├ modules ││├ bbs(掲示板モジュール) │││├ controllers ││││└ helpers │││├ models │││├ views ││││└ scripts ││├ mail(メールモジュール) │││├ controllers ││││└ helpers │││├ models │││├ views ││││└ scripts │├ data │├ library │├ public 公開層(ドキュメントルート) ││├ css ││├ images ││├ .htaccess ││└ index.php 上のようなディレクトリ構成で、 掲示板モジュールには画像を使用しているのですが その画像はpublicフォルダ内のimagesフォルダに置くしかないのでしょうか? 公開してる画像フォルダがそこしかないので当然じゃないかと思われるでしょうが、 自分としては掲示板モジュールはその名前の通り、どんなアプリケーションからも 再利用可能で、画像だけ掲示板モジュールフォルダ外に置くのは違う気がするというか・・・ 例えば掲示板モジュールで使うコントローラとかモデルとかは掲示板モジュールフォルダ内にある(つまり独立している)のに 画像だけ切り離しができないわけですが、なんとかならないでしょうか?

    • ベストアンサー
    • PHP
  • CakePHPでディレクトリ分けをしたい

    CakePHP2.3.4、サーバーはロリポップにて開発を行っております。 やりたいことは、コントローラーのディレクトリ分けです。 以下のようなディレクトリ構造にして、 app  |_Controller  |   |_admin  |    |    |_LoginController.php  ※メソッドはindex()のみと仮定  |    |    |_・・・.php  |    |  |    |_ListController.php  ※メソッドはindex()のみと仮定  |  |_View ※Viewも分けますが、今は省略しています。 アプリケーション「LoginCntroller.php」にアクセスする場合は http://○○.ne.jp/admin/login/index アプリケーション「ListController.php」にアクセスする場合は http://○○.ne.jp/list/index でアクセスしたいです。 自分なりに調べて、「bootstrap.php」に以下追加、 App::build(array(  'Controller' => array(ROOT.DS.APP_DIR.DS.'Controllers'.DS.'Admin'.DS,) )); 「route.php」に以下追加、 Router::connect('/admin/login', array('controller' => 'login', 'action' => 'index')); などと行ってみてはいるのですが、結果、以下のエラーになってしまいます。 Missing Controller Error: AdminController could not be found. Error: Create the class AdminController below in file: app/Controller/AdminController.php <?php class AdminController extends AppController { } Controller直下に配置したアプリケーションに関しては問題なく実行されます。 何が悪いのか見当もつかず困っております。 よろしければご教授いただけませんでしょうか。

    • 締切済み
    • PHP
  • ZendFramework1.0.0RCの動作方法

    テスト的にコントローラー部で Zend::loadClass('Zend_Controller_Action'); Zend::loadClass('Zend_View'); という記述をしているのですが、 Fatal error: Class 'Zend' not found in C:\Program Files\Apache Group\Apache2\htdocs\controllers\IndexController.php on line 2 と言われてしまいます。 なんの設定ミスか分かるでしょうか? include_pathは、mod_rewriteによって飛ばされるindex.phpの1行目にset_include_path()を利用して設定しています。

    • 締切済み
    • PHP
  • 1つのcakePHPで複数のサイトを作成したい

    1つのアプリ(cakePHP)で、複数のサイトが入っている物を作成したいです。 URLであらわすと下記のように、みかんコンテンツとりんごコンテンツが1つのサイトの中に別々にある感じです。 http://ドメイン/mikan/top/index/ http://ドメイン/ringo/top/index/ (http://ドメイン/コンテンツ名/コントローラー名/ファンクション名/) また、ファイル数が膨大になるため、下記のようにフォルダ分けをしたいです。 ●controllersフォルダ controllers   └mikan     └top_controoler.php   └ringo     └top_controller.php ●viewsフォルダ views   └mikan     └top      └index.html   └ringo     └top      └index.html ※controllerとview以外のファイルは共通で使いたい こうしたいのですが、ルーティングなどをいじっても上手くいかず、現在は下記のようにしています。 http://ドメイン/mikan_top/index/ http://ドメイン/ringo_top/index/ (http://ドメイン/コントローラー名/ファンクション名/) ●controllersフォルダ controllers   └mikan     └mikan_top_controoler.php   └ringo     └ringo_top_controller.php しかし、これだとURLがかっこ悪いので、最初に示したURLでアクセスできるようにしたいのです。 何かいい方法は無いでしょうか? controllerやviewのファイル名、クラス名などは複雑になっても構いません。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 書籍「ZendFramework徹底マスター」で分からない部分があります。

    PHP2年目で遂にフレームワークに挑戦することになり 本を買ってきたのですが、 22ページ目でつまずきました。 ZFのインストールは出来ましたが、 その後にapplicataion/controllers/に、 HogeController.phpを作成とあるのですが、 application/controllersディレクトリが複数あります。 どれのことなのでしょうか? ZFのを使ったことがある人でもいいので教えてください。 あまり親切な本ではないですね・・・・。

    • ベストアンサー
    • PHP
  • Zend Frameworkでoracle接続

    Zend Frameworkを勉強しようと思い始めたばかりのものです。 oracleに繋がらずどこをチェックすればよいのかさっぱりわかりません。 どなたかご教授願えないでしょうか? zfツールを使い雛形を作って、module で分けてみたり、ヘッダー、フッターをlayoutを使って分けたりと少し前進しました。 次はDB接続だと思い始めたのですが繋がりません。 ■環境 CentOS release 5.6 (Final) ■やったこと 1)oracle接続モジュール oci8 をインストール # export ORACLE_HOME=/opt/oracle/product/10.2.0/db # pecl install oci8 php.ini に追記 # vi /etc/php.ini extension=oci8.so 2)ローカルで接続テスト これは問題なく接続できてるみたいなのです。 # more test.php <?php putenv("ORACLE_HOME=/opt/oracle/product/10.2.0/db"); putenv("LD_LIBRARY_PATH=:/opt/oracle/product/10.2.0/db/lib"); // Zend_Dbライブラリの読み込み require_once 'Zend/Loader.php'; require_once 'Zend/Db.php'; $dbInit = array( 'host' => 'localhost', 'username' => 'usrxx', 'password' => 'usrxx', 'dbname' => 'xxdb' ); $db = Zend_Db::factory('oracle', $dbInit); $db->getConnection(); echo 'OK'; $db->closeConnection(); # php test.php OK 3)Zend Frameworkで接続テスト IndexController.php の indexAction でやってみたのですがダメなのです。 public function indexAction() { $dbInit = array( 'host' => 'localhost', 'username' => 'usrxx', 'password' => 'usrxx', 'dbname' => 'xxdb' ); $db = Zend_Db::factory('oracle', $dbInit); $db->getConnection(); $db->getConnection(); echo 'OK'; $db->closeConnection(); } ※/etc/sysconfig/httpdに以下を追加しました export ORACLE_HOME=/opt/oracle/product/10.2.0/db export LD_LIBRARY_PATH=/opt/oracle/product/10.2.0/db/lib 実行するとどうしてもエラーとなります。 ■エラーメッセージ An error occurred Application error Exception information: Message: Unknown exception Stack trace: #0 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Db/Adapter/Abstract.php(315): Zend_Db_Adapter_Oracle->_connect() #1 /home/www/zf/application/modules/default/controllers/IndexController.php(30): Zend_Db_Adapter_Abstract->getConnection() #2 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Controller/Action.php(516): IndexController->indexAction() #3 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Controller/Dispatcher/Standard.php(295): Zend_Controller_Action->dispatch('indexAction') #4 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #5 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() #6 /home/www/zf/venders/ZendFramework-1.11.11/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() #7 /home/www/htdocs/shopping/necs/zf/index.php(29): Zend_Application->run() #8 {main} Request Parameters: array ( 'controller' => 'index', 'action' => 'index', 'module' => 'default', ) どこを確認すればよいかのサッパリわからず投稿させていただきました。 何卒よろしくお願いします。

    • 締切済み
    • PHP
  • VB2008 ASP.NET 「WEBアプリケーション」で開発しようと

    VB2008 ASP.NET 「WEBアプリケーション」で開発しようと思っています。 今まで、「WEBサイト」でのみ開発してきたので、どのようにプロジェクト構成を行えばいいかわかりません。 WEBアプリケーションの場合、 1.1機能1プロジェクト 2.1アプリケーション1プロジェクト で構成すればいいのでしょうか? もし、1の場合、共通で使用するスクリプトやスタイルシートはどのように配置すればいいのでしょうか?

  • ZendFremeworkインストールについて

    index.phtmlが設置されていない等でのエラーが表示されるケースはgoogleなどで表示されるのですが、 Broker.phpに関するエラー表示が見つかりませんでしたので、質問させて頂きました。 今回新しい案件で、ZendFremeworkに関して作成出来るようになるべく、 ZendFremeworkに関連するサイトを閲覧しながら、インストールしました。 html/index.phpに下記のように、コードを挿入し、バージョン確認を行った所、 正常に動作しました。 require_once 'Zend/Version.php';  //ライブラリの読み込み echo Zend_Version::VERSION;     //現在のZend Frameworkのバージョンを表示 ですが、下記の分に変更した所、エラーが発生しました。 require_once 'Zend/Controller/Front.php'; Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true); Zend_Controller_Front::run('../zend_app/controllers'); [エラー内容] ============================================================== Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in (略)\Zend\Controller\Dispatcher\Standard.php:248 Stack trace: #0 (略)\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 (略)\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() #2 (略2)\Zend\index.php(11): Zend_Controller_Front::run('../zend_app/con...') #3 {main} Next exception 'Zend_Controller_Exception' with message 'Invalid controller specified (error)#0 (略)\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 (略)\Zend\Controller\Front.php(212): Zend_Controller_Front->dispatch() #2(略)\Zend\Controller\Plugin\Broker.php on line 336 ============================================================= バージョンが表示できているので、インストール自体は出来ていると思うのですが、 実際にコントローラーを設定した時には、何を行ってもこの現象が起こってしまいます。 いくら検索しても、見つからなかったので、質問させて頂きました。 どうぞ宜しくお願いします。 [ 開発環境 ] XAMMP (PHP5.3.1) Windows7(64bit) 下記のようなフォルダ構成となっております。 ===================================== /Zend(公開エリア)    .htaccess    index.php /zend_app(アプリケーションエリア)    /controllers       IndexController.php    /models    /views       /scripts          /index             index.phtml /ZendFramework(フレームワーク本体)    /library /Zend /Controller ======================================

    • 締切済み
    • PHP
  • CakePHPでのログイン画面生成について。

    CakePHPでのログイン画面生成について。 参考URLは以下です。 http://h2o-space.com/blog/1950 以上の記事の通り設定・アップロードをし、 add.phpにアクセスすると Missing Method in ViewsController Error: The action add.php is not defined in controller ViewsController Error: Create ViewsController::add.php() in file: app/controllers/views_controller.php. <?php class ViewsController extends AppController { var $name = 'Views'; function add.php() { } } ?> とのエラーが出ます。 <?php class ViewsController extends AppController { var $name = 'Views'; function add.php() { } } ?> をviews_controller.phpに書き込むと Parse error: syntax error, unexpected '.', expecting '(' in /home/rslitefc2/users/アカウント/public_html/login/app/controllers/views_controller.php on line 7 と、エラーが出ます。 7行目の記述はfunction add.php() {です。 どうしたらログイン画面を正しく生成することが出来るでしょうか? どなたかお教えいただければ幸いです。 宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう