JSON — PHP MVC — Модель отношений

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

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

Class Gender{
public $id;
public $description
}

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

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

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

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

С уважением

1

Решение

Контроллер не обязан извлекать постоянные данные, для этого у вас должен быть Mapper. Есть много ответов, которые подробно объясняют функции моделей и контроллеров (этот очень хороший).

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‘считается частью вашей модели (видеть это)

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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]