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

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

Код: 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
27.04.2012, 05:34:50
    #37773274
r u
r u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP] Маппинг между объектом и $_POST
Аноним 250,

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

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

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

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



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

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



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


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