CodeIgniter - переменная область - PullRequest
1 голос
/ 04 апреля 2011

У меня есть контроллер, который я использую для формы входа.По моему мнению, у меня есть переменная {error}, которую я хочу заполнить с помощью библиотеки parser, когда возникает ошибка.У меня есть функция index () в моем контроллере, управляемая массивом $ init, который устанавливает некоторые базовые переменные и сообщение об ошибке '':

    function index()
    {
    $init = array(
                    'base_url'      =>      base_url(),
                    'title'         =>      'Login',
                    'error'         =>      ''
            );

    $this->parser->parse('include/header', $init);

    $this->parser->parse('login/index', $init);

    $this->parser->parse('include/footer', $init);
    }   

В конце моего сценария входа в систему у меня есть следующее:

  if { // query successful }
  else 
        {
            $init['error'] = "fail";

            $this->parser->parse('login/index', $init);
        }

Теперь, конечно, это не работает.Во-первых, он загружает только индексное представление без заголовка и нижнего колонтитула и не может установить исходную переменную $ init ['error'] (в данном случае) "fail".Я пытался просто вызвать $ this-> index () с возможно массивом в качестве аргумента, но я не могу понять, как я могу передать новый $ init ['error'], который переопределяет исходный.На самом деле, при наборе этого, кажется, невозможно сделать то, что я хочу сделать, так как исходное значение всегда будет переопределять что-то новое .. так как я объявляю это как ничто ('').

Итак, есть ли способ получить мое сообщение об ошибке или нет?И если да, то как.Если нет, то как мне получить сообщение об ошибке в нужном месте?(мое мнение: {error}. Я пробовал вещи с 'global', чтобы обойти область видимости переменной, но увы, это не удалось. Большое спасибо заранее.

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

$ init должен быть изменен перед генерацией вашего представления.

Чтобы загрузить свой верхний и нижний колонтитулы, вы можете включить в свой вид следующую команду и эквивалент нижнего колонтитула.

<?php $this->load->view('_header'); ?>

для отображенияошибки, вы также можете использовать validation_errors ()

, если вы используете проверку формы codeigniter.

, если вы используете datamapper orm для codeigniter, вы можете написать проверки модели, и если запроспроисходит сбой из-за нарушения правила проверки, вы получаете правильное сообщение об ошибке в свойстве -> error вашей модели.

Код для вашей модели:

var $validation = array(
        'user_name' => array(
            'rules' => array('required', 'max_length' => 120),
            'label' => 'Name'
        )
    );
0 голосов
/ 13 июля 2014

Вы можете попробовать это:

function index() {
    $init = array(
        'base_url' => base_url(), 
        'title' => 'Login',
        'error' => ''
    );
    $string = $this->parser->parse('include/header', $init, TRUE);
    $string .= $this->parser->parse('login/index', $init, TRUE);
    $string .= $this->parser->parse('include/footer', $init, TRUE);
    $this->parser->parse_string(string);
}

В parse() вы можете передать TRUE (логическое значение) третьему параметру, когда вы хотите, чтобы данные возвращались, а не отправлялись (немедленно) в выходной класс. С другой стороны, метод parse_string работает точно так же, как `parse (), принимает только строку в качестве первого параметра вместо файла представления, таким образом, он работает совместно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...