SiZE
Новичок
Типичный MVC. Генерируется форма (собирается из нескольких вьюх и моделей), которую пользователь заполняет, данные сохраняются в БД. Формы отличаются в зависимости от выбранного документа, но имеют некоторый общий набор данных. Часть данных в форме фиксирована, например, ФИО, эл.почта и тп. Другая часть динамически наполняемая пользователем, например, список товаров. Пользователь добавляет в форму столько сколько ему нужно.
При создании формы, для облегчения заполнения некоторые поля формы заполняются, значениями по умолчанию. Я не знаю, как реализовать это заполнение. Точней где заполнять объект предустановленными данными? Где хранить эти данные? Мне бы очень помогло подробное объяснение реализации.
UPD: Все решил через наследование и сценарии в моделях
При создании формы, для облегчения заполнения некоторые поля формы заполняются, значениями по умолчанию. Я не знаю, как реализовать это заполнение. Точней где заполнять объект предустановленными данными? Где хранить эти данные? Мне бы очень помогло подробное объяснение реализации.
PHP:
class DocController {
public function actionCreate( $type ){
$factory = new DocFactory();
$doc = $factory->createDoc( $type );
if ( $doc === null ) {
throw new CHttpException(404,'Page doesn\'t exists');
}
if ( isset( $_POST['somedata'] ) ) {
// здесь будет сохранение введенных пользователем данных
} else {
// здесь надо решить, как заполнить данными по умолчанию $doc
}
$this->render( $doc->getView('create'), array(
// в представлении значения в форму будут взяты из объекта $doc
'doc' => $doc
));
}
}
PHP:
class DocFactory {
protected $contract_profitable;
public function createDoc( $type ){
switch( $type ){
case 'contract_profitable':
return $this->getContractProfitable();
break;
}
return null;
}
public function getContractProfitable(){
if ( $this->contract_profitable === null ) {
$this->contract_profitable = new DocContractProfitable();
}
return $this->contract_profitable;
}
}
interface IDoc {
public function getView( $view );
}
class DocContractProfitable implements IDoc {
public function getView( $view ){
return $view;
}
}
Последнее редактирование: