function work(Request $request) { $this->_base_uri = $request['REQUEST']['object']->uri(); $request->mix(['REQUEST' => ['base_uri' => $this->_base_uri]]); if ($request['REQUEST']['form'] !== false) { // Обработка формы $session = array(); try { // Вызов полей для свойств объекта $request->mix(['REQUEST' => ['call' => 'check']]); $list = $this->getList($request); if (is_array($list)) { $input = $request->getInput(); $views = $this->linked()->views->linked(); foreach ($list as $obj) { $name = preg_replace('/' . preg_quote($this->_base_uri . '/', '/') . '/u', '', $obj->uri()); $obj_input = []; if (isset($input['REQUEST'][$name])) { $obj_input['REQUEST']['value'] = $input['REQUEST'][$name]; } if (isset($input['FILES'][$name])) { $obj_input['FILES']['value'] = $input['FILES'][$name]; } $obj_input['REQUEST']['object'] = $obj; $views->start($request->mix($obj_input)); } } if (!$request['REQUEST']['object']->errors()->isExist()) { // Выполнение действия $this->process($request); $this->_result = self::FORM_RESULT_OK; if (!($redirect = $this->getCommands('redirect'))) { $redirect = $this->redirect->inner(); if (!$redirect->is_draft() && $redirect->value() != '') { $request->redirect(Request::url($redirect->value())); } } } else { $this->_result = self::FORM_RESULT_ERROR; } } catch (\Exception $error) { $this->_result = self::FORM_RESULT_ERROR; } $session['result'] = $this->_result; if ($this->_result == self::FORM_RESULT_ERROR) { $session['object'] = $request['REQUEST']['object']->toArray(); // @todo Для ajax запросов нужна развернутая информация об ошибках для каждого поля $session['message'] = 'Ошибки'; } else { if ($this->_result == self::FORM_RESULT_ERROR) { $session['message'] = 'Успех'; } } // @todo Для ajax запросов в сессию сохранять нет смысла Session::set('form', array($this->uri() . $this->getToken() => $session)); setcookie('token', $this->getToken(), 0, '/'); return $session; } else { // Отображение формы $v = array(); if (isset($request['COOKIE']['token']) && Session::is_exist('form')) { $form = Session::get('form'); if (isset($form[$this->uri() . $request['COOKIE']['token']])) { $form = $form[$this->uri() . $request['COOKIE']['token']]; Session::remove('form'); } if (isset($form['object'])) { $request['REQUEST']['object'] = Entity::fromArray($form['object']); } if (isset($form['result'])) { $this->_result = $form['result']; } } $this->res->start($request); return $this->show($v, $request); } }