CodeIgniter: отображение динамических ошибок - PullRequest
1 голос
/ 05 марта 2012

Обновлено:

RJZ:

TdjxQetc - это $activateCode, которое приходит из БД, поэтому при запуске / подтверждении/ Я должен получить сообщение Извините, у вас не было правильного кода активации, поскольку я не передаю ни одной переменной ($activateCode), но когда я запускаю / подтверждаю / $activateCode я должен получить Спасибо, ваша учетная запись теперь активна, вы можете войти!и с оператором else

Я думаю, что это должно быть изменено, и была разработана новая функция модели, чтобы проверить, было ли userActive установлено на 1, а затем отобразить еще один $message, чтобы ссылка моглатолько для использования.


Вид:

<div class = "messages">
    <?php if($confirmMessage != ''): ?>
        <?php if($confirmError): ?>
            <p class="error">
                <?php echo $confirmMessage; ?>
                </p>
                <?php else: ?>
                    <p class="message">
                        <?php $confirmMessage?>
                        </p>
                        <?php endif; ?>
                        <?php endif; ?>
    </div>

Контроллер:

function confirm(){

        $activateCode = $this->uri->segment(3);
        $error = FALSE;
        $message = '';

        if($activateCode == '')
        {
            $error = TRUE;
            $message = 'Sorry you did not have a correct Activation Code.';
        }
            $userConfirmed = $this->users_model->confirm_user($activateCode);

            if($userConfirmed){
                $message = 'Thanks your account is now active you may login!';
            }else{
                $error = TRUE;
                $message = 'I am sorry we do not have any details with that Activation Code';
            }
            $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
            $data['pageTitle'] = "User Confirm";
            $data['confirmError'] = $error;
            $data['confirmMessage'] = $message;
            $this->load->view('frontend/assets/header', $data);
            $this->load->view('frontend/user_confirm', $data);
            $this->load->view('frontend/assets/footer');
    }

Я не уверен, почему я не получаю сообщения проверки, я просто получаю свое мнение.База данных обновляется до 1.

Просмотр:

<h1><?php echo $companyName; echo nbs(1);?> - <?php echo $pageTitle; ?></h1>

    <p>Error: <?php echo validation_errors();?></p>

Контроллер:

function confirm(){

        $activateCode = $this->uri->segment(3);

        if($activateCode == '')
        {
            $this->form_validation->set_message('userConfirmError', 'Sorry you did not have a correct Activation Code.');
        }
            $userConfirmed = $this->users_model->confirm_user($activateCode);

            if($userConfirmed){
                $this->form_validation->set_message('userConfirmed', 'Thanks your account is now active you may login!');
            }else{
                $this->form_validation->set_message('userRecord', 'I am sorry we do not have any details with that Activation Code');
            }
            $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
            $data['pageTitle'] = "User Confirm";
            $this->load->view('frontend/assets/header', $data);
            $this->load->view('frontend/user_confirm', $data);
            $this->load->view('frontend/assets/footer');
    }

Функция подтверждения:

function confirm_user($activateCode)
    {
     //Selects the userID where the given URI activateCode = ?

        $this->db->select('userID');
        $this->db->from('users');
        $this->db->where('userActiveCode', $activateCode);

        $result = $this->db->get();

        if($result->num_rows == 1)  // If the above result is = 1 then update the userActive row else it will fail
        {
            $this->db->set('userActive', 1);
            $this->db->where('userActiveCode', $activateCode);

            return TRUE;
        }else{
            return FALSE;
        }

Модель ядра:

function companyDetails()
    {
        static $details;

        if(!$details)
        {
            $this->db->select('coreCompanyName, coreContactName, coreContactEmail');
            $details = $this->db->get('core')->first_row();
        }
        return $details;
    }

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Ты как бы делаешь гору из крота, Джесс. Давайте посмотрим, что мы можем сделать, чтобы очистить это:

Метод контроллера

function confirm()
{
    $activate_code = $this->uri->segment(3);

    if(!$this->users_model->confirm_user($activate_code))
        $error = true;
    else
        $error = false;

    $data['companyName'] = $this->core_model->companyDetails()->coreCompanyName;
    $data['pageTitle'] = "User Confirm";
    $data['confirmError'] = $error;
    $this->load->view('frontend/assets/header', $data);
    $this->load->view('frontend/user_confirm', $data);
    $this->load->view('frontend/assets/footer');
}

View

<div class = "messages">
    <?php if($confirmError): ?>
        <p class="error">
            Your activation code is invalid.
        </p>
    <?php else: ?>
         <p class="message">
            Your account has been activated.
         </p>
    <?php endif; ?>
</div>

Пожалуйста, добавьте этот код в начало вашего метода UserModel :: verify_user:

if($activateCode == '')
   return false;

Я упростил ваш метод контроллера только в двух случаях - успех или ошибка. Нет необходимости проверять код_пользователя, потому что ваша модель делает это за вас.

Кроме того, я предпочитаю сохранять строки, которые используются только в представлениях, где они принадлежат - в представлении.

0 голосов
/ 05 марта 2012

Если вы этого еще не сделали, вам нужно вызвать помощника validation_errors() (или одного из других помощников Codeigniter для генерации ошибок) в вашем файле просмотра.

// in view file
<form>
  <?php echo validation_errors(); ?>
  <!-- rest of form... -->
</form>

Если вы звоните validation_errors() и по-прежнему не видите вывод, возможно, потому что проверка не запущена.Перед вызовом представления необходимо запустить проверку формы:

// in controller action function
$this->form_validation->run();

С кодом, который вы предоставили выше, это все равно не совсем позаботится о вещах - вы на самом деле не установили никаких правилдля проверки.Возможно, вы захотите прочитать руководство по проверке , но общий подход выглядит следующим образом:

// in controller action function
$this->form_validation->add_rules('my_field', 'My Field Name', 'required');
$this->form_validation->run();

Возможно, вам интересно, что на самом деле тестирует add_rules.В Codeigniter он обычно предназначен для работы с любыми данными формы, $_POST редактируемыми из формы.Чтобы использовать его непосредственно в модели (как вы, похоже, пытаетесь это сделать), потребуется некоторый взлом, и может быть проще всего использовать переменную flag и строку сообщения:

function confirm($activateCode = '') {

  $error = false;
  $message = '';

  if($activateCode == '')
  {
    $error = true;
    $message = 'Sorry you did not have a correct Activation Code.';
  }

  $userConfirmed = $this->users_model->confirm_user($activateCode);

  if($userConfirmed)
  {
    $message = 'Thanks your account is now active you may login!';
  }
  else
  {
    $error = true;
    $message = 'I am sorry we do not have any details with that Activation Code';
  }

  $data['error'] = $error;
  $data['message'] = $message
}

Inпросмотр:

<?php if ($message != ''): ?>
<?php if ($error): ?>
  ERROR: <?php echo $message; ?>
<?php else: ?>
  SUCCESS: <?php echo $message; ?>
<?php endif; ?>
<?php endif; ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...