Я работаю над структурированным веб-сайтом Model-View-Controller на основе PHP.Я понимаю, что Модели должны иметь дело с бизнес-логикой, представлениями представления HTML (или чего-либо еще) пользователю, и контроллеры облегчают это.Где я бегу, застрял с формами. Сколько обработки я помещаю в контроллер и сколько я помещаю в мою модель?
Предположим, что я пытаюсь обновить имя и фамилию пользователя.Я хочу отправить форму с использованием AJAX одному из моих контроллеров.Я хочу, чтобы данные были проверены (снова) на стороне сервера, и, если они действительны, сохраните их в базе данных, а затем верните ответ JSON обратно в представление как успешное или ошибочное.
Должен ли я создатьэкземпляр моей пользовательской модели в контроллере, или я просто должен иметь реле контроллера для статического метода в моей модели?Вот два примера того, как это может работать:
Вариант № 1: Процесс POST в модели
<form action="/user/edit-user-form-submit/" method="post">
<input type="text" name="firstname">
<input type="text" name="lastname">
<button type="submit">Save</button>
</form>
<?php
class user
{
public function __construct($id){} // load user from database
public function set_firstname(){} // validate and set first name
public function set_lastname(){} // validate and set last name
public function save_to_database(){} // save object fields to database
public static function save_data_from_post()
{
// Load the user
$user = new user($_POST['id']);
// Was the record found in the db?
if($user->exists)
{
// Try to set these fields
if(
$user->set_firstname($_POST['firstname'])
and
$user->set_lastname($_POST['lastname'])
)
{
// No errors, save to the dabase
$user->save_to_database();
// Return success to view
echo json_encode(array('success' => true));
}
else
{
// Error, data not valid!
echo json_encode(array('success' => false));
}
}
else
{
// Error, user not found!
echo json_encode(array('success' => false));
}
}
}
class user_controller extends controller
{
public function edit_user_form()
{
$view = new view('edit_user_form.php');
}
public function edit_user_form_submit()
{
user::save_data_from_post();
}
}
?>
Вариант № 1: Процесс POST в модели
<form action="/user/edit-user-form-submit/" method="post">
<input type="text" name="firstname">
<input type="text" name="lastname">
<button type="submit">Save</button>
</form>
<?php
class user
{
public function __construct($id){} // load user from database
public function set_firstname(){} // validate and set first name
public function set_lastname(){} // validate and set last name
public function save_to_database(){} // save object fields to database
}
class user_controller extends controller
{
public function edit_user_form()
{
$view = new view('edit_user_form.php');
}
public function edit_user_form_submit()
{
// Load the user
$user = new user($_POST['id']);
// Was the record found in the db?
if($user->exists)
{
// Try to set these fields
if(
$user->set_firstname($_POST['firstname'])
and
$user->set_lastname($_POST['lastname'])
)
{
// No errors, save to the dabase
$user->save_to_database();
// Return success to view
echo json_encode(array('success' => true));
}
else
{
// Error, data not valid!
echo json_encode(array('success' => false));
}
}
else
{
// Error, user not found!
echo json_encode(array('success' => false));
}
}
}
?>
Два примера делают одно и то же, я это понимаю.Но есть ли правильный и неправильный способ сделать это?Я много читал о тощих контроллерах и толстых моделях, откуда появился вариант № 1.Как вы справляетесь с этим?Спасибо и извините за длинный вопрос!