2014-10-20 2 views
1

Я пытаюсь создать приложение PHP с использованием шаблона MVC. Я новичок в MVC, и я не использую фреймворк, так как хочу глубже понять основные процессы MVC. У меня есть вопрос о моделях, представлении JSON и внешних ключах. Давайте предположим, что у меня есть две модели:PHP MVC - отношения модели

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

Class Gender{ 
    public $id; 
    public $description 
} 

Определяемые пользователем> gender_id является внешним ключом к Genders-> идентификатор таблицы.

Мой URI является/пользователи/1, которая должна возвращать следующий JSON:

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

обязанность контроллера знать модели отношений и получить необходимые данные (пользователь & гендерной модели), которая будет затем передаваться в представление, которое будет выводить JSON? Или должна ли ассоциация быть каким-то образом определена в модели пользователя? Гендерное описание является описательным атрибутом, но каким-то образом оно должно быть включено в представление «Пользователи».

С уважением

ответ

0

Это не обязанность контроллера для получения сохраненных данных, вы должны иметь Mapper для этого. Существует много ответов, в которых подробно объясняются функции моделей и контроллеров (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» (из-за отсутствия лучшего слова), чтобы вернуть строку JSON вашего User объекта. Обратите внимание, что это «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); 
Смежные вопросы