name = $name; $this->header = $header; /********************************/ $this->error = false; $this->result = false; /********************************/ $name = 'form'; $model_name = $name . 'Model'; $view_name = $name . 'View'; /********************************/ $this->model = new $model_name(); $this->view = new $view_name(); } private function GetData(){ /***********************************************/ $data['name'] = $this->name; $data['header'] = $this->header; $data['info'] = $this->info; $data['errors'] = $this->errors; $data['items'] = $this->items; return $data; } function Make() { $data = $this->GetData(); // данные отправлены if ( $_POST['do'] == 'register_go' ) { $this->model->Validate( $this->GetData() ); } return $this->view->Make( $this->GetData() ); } function AddItem( $input ){ $this->items[$input->name] = &$input; } /** * Set info for the form * * add values: * ADD - add the info * REWRITE - rewrite form info * * @param string $info * @param mixed $add */ function SetInfo( $info , $add = false ){ $info = nl2br( $info ); if ( $add ){ $this->info = $this->info . $info; } else { $this->info = $info; } } /** * Echo input returned by make function * */ function Display(){ echo $this->Make(); } } // class Controller ////////////////////////////////////////////////////////////////////////////////////////////////// class FormView { /** * Makes the the form * * @param string header * @param string body * @param string info * @param string errors */ static function Make( $data ) { /**************************** data array ****************************/ $name = $data['name']; $header = $data['header']; /***************************/ $info = $data['info']; $items = $data['items']; $validated = $data['validated']; /***************************/ $errors = ''; $body = ''; /***************************/ foreach ( $items as $item ){ $body .= '
  • ' . $item->Make() .'
  • '; if ( $error = $item->GetErrorMessage() ){ $errors .= $error . "
    \n"; } } /****************************

    aragraphs with info ****************************/ if ( $header ){ $header = '

    ' . $header . '

    ' . "\n"; } if ( $info ){ $info = '

    ' . "\n\t" . $info . '

    ' . "\n"; } if ( $errors ){ $errors = '

    ' . "\n\t" . $errors . '

    ' . "\n"; } if ( $body ){ $body = '' . "\n"; } return '
    ' . $header . '
    ' . $info . $errors . $body . ' Поля отмеченные звездочкой( * ) обязательны для заполнения.
    '; } } // class View ////////////////////////////////////////////////////////////////////////////////////////////////// class FormModel { public $data; function __construct() { $this->data = false; } function Validate( $data ) { $items = $data['items']; foreach ( $items as $item ){ $item->Validate(); } } } ?> SetInfo( 'Логин и пароль должны содержать только латинские буквы и цифры. Длина логина - до 15 символов, пароля - до 20 символов. Поля логин, пароль и капча обязательны к заполнению, E-Mail опционально.' ); $login = new InputController('login','Логин'); $login->SetRegExpPattern('/\d/i'); $login->SetRequired ( REQUIRED ); $password = new InputController('password','Пароль','password'); $password->SetRequired ( REQUIRED ); $email = new InputController('email','EMail'); $email->SetRegExpPattern('/^([a-z0-9])(([-a-z0-9._])*([a-z0-9]))*\@([a-z0-9])*(\.([a-z0-9])([-a-z0-9_-])([a-z0-9])+)*$/i'); $form->AddItem( $login ); $form->AddItem( $password ); $form->AddItem( $email ); $form->Display(); echo ''; function CapitalsToUnderscore( $string ){ $string = (string)$string; $string = preg_replace( '/([A-Z])/e' , '_.strtolower($1)' , $string); if ( $string[0] == '_' ){ $string = substr( $string , 1 ); } return $string; } echo CapitalsToUnderscore( 'RandOmlYCapitaliZEDstringOo' );