powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Маппинг между объектом и $_POST
11 сообщений из 11, страница 1 из 1
[PHP] Маппинг между объектом и $_POST
    #37773270
Аноним 250
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте,

Допустим есть такой код в контроллере:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
function GetEditCustomerPage(...)
{
	...

	if(!empty($_POST))
	{
		$formValidator = new FormValidator($_POST);
		$formValidator->addRule(new LengthValidationRule('txtLogin', 'Login must be between 3 and 20 characters bla bla bla', 3));
		// добавляем здесь другие правила валидации

		if($formValidator->validate())
		{
			// ПРОБЛЕМА 1
			// теперь нужно из post-запроса заполнить объект $customer
			$request = $formValidator->getCleanRequest();
			$customer = ...
			$customer->Email = $request->Email;
			// и т.д.
			CustomerService::saveCustomer($customer);
			FlashHelper::setFlash('Customer saved! Cool!', FlashHelper::MESSAGE_TYPE_SUCCESS);
			redirect("{$_SERVER['PHP_SELF']}?customers");
		}
		else
		{
			// значения полей и сообщения об ошибках будут вставлены в шаблон автоматически
			// ($request['txtLogin'] вставится в шаблоне в {txtLogin_value}, 
			// $errors['txtLogin'] пойдет в {txtLogin_error}, и т.д.)
			return Presenter::GetEditCustomerPage($formValidator->getCleanRequest(), $formValidator->getErrors());
		}
	}


	// ПРОБЛЕМА 2
	// нужно из объекта $customer заполнить запрос ($request) чтобы в Presenter'е данные вставились в шаблон
	$request = array(
		'txtLogin' => $customer->Login,
		'txtEmail' => $customer->Email,
		// и т.д.
	);

	return Presenter::GetEditCustomerPage(new CleanRequest($request));
}



Проблемные места обозначены в коде как ПРОБЛЕМА 1 и ПРОБЛЕМА 2. Т.е. мне не нравится что этот маппинг надо делать вручную.

Что посоветуете?
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37773274
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аноним 250,

не считаю это проблемой. наоборот сразу видно какие поля и как заполняются. есть свобода действия.

можно сделать в базовом классе модели, метод для автоматического заполнения конечно, но что вы будете делать с автоматически заполняемыми полями типа даты, значений по умолчанию и т.д. только добавите себе проблем и свяжите себя по рукам.
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37773420
MVC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC
Гость
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37773469
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например во фреймворке YII модель сама занимается заполнением себя из $_POST согласно некоторым правилам, описанным в самой же модели. Можете попробовать глянуть объектную модель этого фреймворка.
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37773503
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только не из пост, а из свойства attributes
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37773542
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettТолько не из пост, а из свойства attributes

Ну свойству attributes то там $_POST передаётся :)

Код: php
1.
2.
$model = new User;
$model->attributes = $_POST['User'];



В моём разумении это просто трансформируется в вызов сеттера класса CModel

Код: php
1.
$model->setAttributes($_POST['User']);



То бишь всё-таки можно сказать, что "модель заполняет себя из переданного её $_POST" :)
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37773772
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это лишь частный случай, говорить что из ПОСТ не правильно)
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37774794
Аноним 250
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MVC Fat Stupid Ugly Controllers
Я так понимаю, вы намекаете что мой контроллер жирноват. Я новичок, возможно чего-то не понимаю. Можете предложить какие изменения лучше сделать в вышеприведенном коде и обосновать, чем это будет лучше?
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37774811
Аноним 250
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
anvanoНапример во фреймворке YII модель сама занимается заполнением себя из $_POST согласно некоторым правилам, описанным в самой же модели. Можете попробовать глянуть объектную модель этого фреймворка.
Я глянул исходник метода setAttributes - там грубо говоря просто "$this->$requestKey=$requestValue;".
В принципе можно сделать так же, т.е. в поля формы надо будет называть так же как поля класса. Но могут возникнуть некоторые трудности. Например у меня специальный хелпер, заполняющий шаблон из запроса смотрит на имя поля, и, например, если оно начинается с chk (checkbox) он вместо {chkField_checked} в шаблоне вставляет "checked='checked'".
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37774816
Аноним 250
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще интересует, как эту задачу решают продвинутые "пхпшники"? Может они не заморачиваются и ручками заполняют, как в моём изначальном примере?
...
Рейтинг: 0 / 0
[PHP] Маппинг между объектом и $_POST
    #37774974
MVC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC
Гость
авторЯ так понимаю, вы намекаете что мой контроллер жирноват. Я новичок, возможно чего-то не понимаю. Можете предложить какие изменения лучше сделать в вышеприведенном коде и обосновать, чем это будет лучше?
а чего там обосновывать...
хочешь мапишь - получаешь объект - нехочешь не мапишь - получаешь массив! и то, и то смело можно кидать в модель!!!
в модели уже происходит валидация того, чего ты туда засунул!!!
вот и всё... ;)
Изменения предложить немогу
- если ты используешь сторонний ФВ - тогда могу посочуствовать тем, кто спровоцировал тебя на его использование, бо весь ход мысли его создателей удивляет!
- если это твоё творение - могу посочуствовать тебе, бо ход твоих мыслей неверен в корне!
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Маппинг между объектом и $_POST
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]