2014-10-20 107 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);