2014-10-20 102 views
1

我想創建一個使用MVC模式的PHP應用程序。我是MVC的新手,我不使用框架,因爲我想更深入地理解底層的MVC過程。我有關於模型,JSON表示和外鍵的問題。讓我們假設我有兩個模型:PHP MVC - 模型關係

Class User { 
    public $id; 
    public $name; 
    public $gender_id; 
} 

Class Gender{ 
    public $id; 
    public $description 
} 

User-> gender_id是Genders-> id表的外鍵。

我的URI是/ Users/1,它應該返回以下JSON:

{"id":1,"name":"john","gender":"male"} 

是控制器的職責,知道該模型的關係,獲取必要的數據(用戶&性別模型),這將隨後被傳遞給將輸出JSON的視圖?還是應該在用戶模型中以某種方式定義關聯?性別描述是一個描述性屬性,但它必須包含在用戶視圖中。

問候

回答

0

這不是控制器的職責,堅持取回數據,你應該有一個映射。有很多答案詳細解釋了模型和控制器的功能(this是一個很好的答案)。

Class User 
{ 
    private $id; 
    private $name; 
    private $gender; 

    public function __construct($id, $name, Gender $gender) 
    { 
     $this->id = $id; 
     $this->name = $name; 
     $this->gender = $gender; 
    } 

    public function getId() 
    { 
     return $this->id; 
    } 
    ... and other getter/setters 

    public function setGender(Gender $gender) 
    { 
     $this->gender = $gender; 
    } 

    public function getGender() 
    { 
     return $this->gender; 
    } 
} 

而且你的性別類這樣的:

Class Gender 
{ 
    private $id; 
    private $description; 

    public function ($id, $description) 
    { 
     $this->id = $id; 
     $this->description = $description; 
    } 

    //with getters and setters 
} 

您可以繼續做一個「Service」(因爲缺乏更好的詞)來回報您的User對象的JSON字符串。請注意,這個「Service」被認爲是模型的一部分(see this

Class UserToJSON 
{ 
    public function convert(User $user) 
    { 
     $user_arr = array(); 
     $user_arr['id'] = $user->id; 
     $user_arr['name'] = $user->name; 
     $user_arr['gender'] = $user->gender->getDescription(); 
     return json_encode($user_arr, true); 
    } 
} 

帶着所有這些地方(假設你有一個有效的User對象)時,你可以得到你的用戶JSON容易像所以:

$user = new User(1, "name", new Gender(1, "female")); 
print (new UserToJSON())->convert($user);