2012-03-20 3 views
0

私は、同じバックエンドサイトで管理されている2つのフロントエンドサイト(2つのテレビチャンネル用に2つのサイトを持っている)を持つ既存のプロジェクト内にZend Frameworkを実装しようとしています。現在、バックエンド/管理領域のコードを複製し、サイトとバックエンドの両方がデータベースを共有しているため、データベースを複製するzendフレームワークの2つのインスタンスでは、これらはあまり整理されていません。同じ管理者とモデル/ DBを共有する2つのサイトのモジュール構造の使用方法は?

Zend Frameworkを実装するにあたっては、1つのモジュールフロントサイト1、フロントエンドサイト2のモジュール1つ、バックエンド/管理サイトのモジュール1つをこのように分割できるようにしたいと考えています。 3つのモジュールがすべて同じデータベース上と同じビジネスオブジェクト上で動作するので、各モジュールを同じモデルに向ける必要があります。

ただし、ドキュメントでこれを行う方法に関する情報は見つかりませんでした。誰かがこれを行う方法に関するリンクか、それを達成するための簡単な手順を助けることができますか?もしこれが間違っていたら、より良い構造を思いつくのですか? www.site1.com - > module1(フロントエンド1)とwww.site2.com - > module2(フロントエンド2)とadmin.site1とadmin.site2の両方を確実にするためには、どのような設定をZFに設定すべきですか?モジュール3にするCOMポイント(管理者/バックエンド)

+0

私はあなたの最大の問題は、正しいURLを取得している可能性が高いと思う(私はルーティングに役立つ資格がない、または私は提案を提供する)。モジュール間のクラスの使用は問題ありません。私はモジュール間でフォームとモデルを日常的に使用しています。私は通常、デフォルトモデル/ dbtableディレクトリに自分のdbTableモデルをセットアップし、どこにでもそれらを共有します。正しいクラス名を呼び出すだけで、すべてが期待どおりに動作する傾向があります。いつものように、他の場所には適合しないし、共有する必要のあるコードにはライブラリがあります。 – RockyFord

答えて

0

は私が間違っている場合、あなたはすべての「コア」とすべてのモデルの「ライブラリ」、および3種類の「モジュール」 1を持っている必要があり、私を修正してください)SITE1

2)サイト2

3)管理者

それが正しい場合は、次のことを行うことができます。

ファイルインデックス.PHPこのようなものを追加します。

// Define application environment 
$environments = array(
    'localhost' => 'local' 
    'www.site1.com' => 'site1', 
    'www.site2.com' => 'site2', 
); 

$host = isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : null; 

if (isset($environments[$host])) { 
    defined('APPLICATION_ENV') 
     || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : $environments[$host])); 
}else{ 
    defined('APPLICATION_ENV','local'); 
} 

すべての必要な環境とのapplication.ini

ファイルの設定は、/情報のすべての残りの部分で、このような何かを持っている必要がありますすべてのサイトを追加します。

; ----------------------------------------------------------------------- 
[production] 
; ----------------------------------------------------------------------- 
resources.frontController.moduleDirectory[] = PUBLIC_PATH "/modules" 
resources.frontController.plugins.moduleselector = "Your_Application_Plugin_ModuleSelector" 
; ----------------------------------------------------------------------- 
[site1 : production] 
; ----------------------------------------------------------------------- 
settings.module.name = "site1" 
; ----------------------------------------------------------------------- 
[site2 : production] 
; ----------------------------------------------------------------------- 
settings.module.name = "site2" 

そして、プラグインファイルを作成します。

/モジュール/ SITE1

/モジュール/ SITE2

class Your_Application_Plugin_ModuleSelector extends Zend_Controller_Plugin_Abstract { 
    public function preDispatch(Zend_Controller_Request_Abstract $request) { 
     ... 
     $request->setModuleName($getVarFromApp); 
    } 
... 
} 

あなたは、あなたはフォルダを持っている必要はapplication.ini

からモジュール名を取得する必要があります

/module/admin

管理サイトは、両方のサイトからアクセスできます。fr om URL www.site1。コントローラのCOM /管理

例ADMINからコントローラの

<?php 
class Admin_IndexController extends Zend_Controller_Action 
{ 

    private $params; 

    function init() 
    { 

    } 

    public function indexAction() 
    { 

    } 
} 

例SITE1またはサイト2

<?php 
class IndexController extends Zend_Controller_Action 
{ 

    private $params; 

    function init() 
    { 

    } 

    public function indexAction() 
    { 

    } 

} 

から私はこの作品を願って、チェックしますが、基本的には何の考えではありません行う。任意の質問は私に知らせてください

+0

本当に私が求めていた質問だったあなたの答えをありがとう、私たちはあなたのソリューションを適用し、それは完璧に正常に動作しています – EddardOmeka

関連する問題