2015-03-31 54 views
0

我的問題是我想要一個代碼(1束)在1臺服務器上,另一臺服務器上的一些代碼(另一臺捆綁),兩臺服務器都會使用相同的數據庫,並正確解耦代碼,我只是想根據一些信息從數據庫中獲取實體,我只需從一臺服務器發送到另一臺服務器。在symfony2解耦

讓我們說,我有一個用戶在一邊,另一方面我有一個客戶(可能是一個壞的例子,但只是用它),客戶根本不知道用戶,也不用戶知道客戶,但我想根據我在客戶中使用的一些信息(或類似的東西)更新用戶的數據。

是否有可能?

感謝

編輯:用戶和客戶的類/包,不要緊,這是他們的,因爲他們仍然在單獨的服務器,我想Customer類/包更新用戶類/捆不它知道User類/ bundle的結構。

EDIT2:

讓我們想象一下,我是用所謂的FOSUserBundle 1級的服務器上(實際的物理服務器)可怕的捆綁,並在同一臺服務器我有註冊,登錄,無論用戶需要操作上,還有一個帳戶實體:

<?php 

namespace MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="accounts") 
*/ 
class Account 
{ 
    protected $id; 

    /** 
    * @ORM\OneToOne(targetEntity="User", cascade={"persist", "remove"}) 
    */ 
    protected $user; 

    /** 
    * @ORM\ManyToMany(targetEntity="File", cascade={"persist", "remove"}) 
    */ 
    protected $files; 
} 

在這個實體的用戶是FOSUserBundle的,我要的文件,以保持從這個實體完全獨立的,文件是在數據庫中,在其他服務器上創建的,由不同的捆綁。爲了能夠更新特定的賬戶,我需要將賬戶的ID發送給其他服務器,並且基於該ID我想更新正確的賬戶,現在,這個服務器不知道文件的實現,並且另一臺服務器不知道Account的實現,但他們都可以訪問數據庫,那麼我可以這樣做嗎?

+1

有點像REST類似的方法嗎?在客戶網站上,您可以使用curl訪問其他網站上的用戶資源。 – Cerad 2015-03-31 01:56:53

+0

但我沒有試圖連接到其他服務器來獲取資源,資源將使用http POST或GET發送到另一臺服務器,並且使用這些資源來更新數據庫。 – user1494173 2015-03-31 09:24:42

+0

仍然困惑。假設用戶服務器具有類似REST的接口,那麼帶有json負載的PUT/users/42將更新用戶。也許別人理解。 – Cerad 2015-03-31 09:41:48

回答

0

你在php中的解耦幾乎與你在任何其他語言中解耦的方式相同。

考慮一個裁判分配系統。我們有:

class GameReferee 
{ 
    private $game; 
    private $refereeName; 
    private $refereeBadge; 
    private $refereeGuid; // Globally unique identifier 
} 

我們存儲裁判的名字和徽章,因爲他們出現在比賽時間表上。但讓我們說我們需要聯繫裁判,因爲比賽已經改變。我們可以:

$event = new FindRefereeContactInfoEvent($refereeGuid); 
$eventDispatcherer->dispatch($event); 
$contactInfo = $event->getContactInfo(); 

遊戲應用程序既不知道該人的聯繫信息的保存位置。它可能位於同一個應用程序中的人員包中。或者它可能在一個完全不同的數據庫的不同服務器上。事件監聽者充當中間人。

當然有很多其他解耦方法。拿你的選擇。

+0

我知道正常的解耦,我的問題是非常不同的(至少我認爲是這樣),因爲Doctrine需要實體的實現才能工作,這意味着實現必須位於同一臺服務器上,所以我只是決定在兩臺服務器上保留一種橋接實體,這樣一臺服務器可以先將其中的一部分放在適當位置,另一臺服務器將其餘部分填滿,我認爲這是一條路。無論如何感謝您的回答,它可能會幫助某人。 – user1494173 2015-04-01 17:53:25

+0

你是對的Cerad,這個答案實際上並不回答我的問題,但你的第一個評論確實如此,這正是我最終做的,服務器只是通過Curl POST請求將信息傳遞迴主服務器的API,告知它什麼發生。你可以在你的答案中添加一些關於使用Curl,REST或API的信息,所以我可以接受它? – user1494173 2015-10-01 18:45:18