CodeIgniter - показывает оригинальный URL функции индекса? - PullRequest
0 голосов
/ 25 января 2011

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

У меня есть контроллер и внутри него индексная функция, которая, очевидно, загружается по умолчанию при вызове этого контроллера:

function index($showMessage = false) {
    $currentEmployee = $this->getCurrentEmployee();
    $data['currentEmp'] = $currentEmployee; 
    $data['callList'] = $currentEmployee->getDirectReports();
    $data['showMessage'] = $showMessage;
    $this->load->view('main', $data);
}

У меня есть другая функция в этом контроллере, которая выполняет массовое обновление. После завершения обновлений я хочу, чтобы исходная страница снова отображалась с сообщением, поэтому я попробовал это:

/**
* Will save all employee information and return to the call sheet page
*/
function bulkSave() {
    //update each employee
    for ($x = 0; $x < sizeof($_POST['id']); $x++) {
        $success = Employee::updateEmployeeManualData($_POST['id'][$x], $_POST['ext'][$x], $_POST['pager'][$x], $_POST['cell'][$x], $_POST['other'][$x], $_POST['notes'][$x]);
    }

    $this->index($success);                
}

Происходит то, что к исходной странице обращаются с помощью: локальный / MYAPP / myController

после массового обновления показывается как: локальный / MYAPP / myController / bulkSave

когда я действительно хочу, чтобы URL снова отображался как страница индекса, а это означает, что пользователь никогда не видит часть URL-адреса / bulkSave. Это также означало бы, что если бы пользователь обновил страницу, он вызвал бы функцию index () в контроллере, а не функцию bulkSave ().

Заранее спасибо.

Возможно ли это?

Ответы [ 2 ]

1 голос
/ 25 января 2011

Вы вызываете свою index() функцию напрямую, в пределах bulkUpdate(), следовательно, URI не возвращается обратно в индекс, потому что вы не делаете новый запрос к серверу, вы просто перемещаетесь в своем классе контроллера.

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

function index() {

    if($_POST) {

        //process posted data
        for ($x = 0; $x < sizeof($_POST['id']); $x++) {
            $data['showMessage'] = Employee::updateEmployeeManualData($_POST['id'][$x], $_POST['ext'][$x], $_POST['pager'][$x], $_POST['cell'][$x], $_POST['other'][$x], $_POST['notes'][$x]);
        }            
    }
    else {

        //show page normally
        $data['showMessage'] = FALSE;

    }

    //continue to load page
    $currentEmployee = $this->getCurrentEmployee();
    $data['currentEmp'] = $currentEmployee; 
    $data['callList'] = $currentEmployee->getDirectReports();
    $this->load->view('main', $data);

}

Тогда, если это форма, котораявы отправляете, просто наведите на себя форму в своем представлении, как это ...

<?= form_open($this->uri->uri_string()) ?>

Это указывает на форму обратно на индекс, а поскольку вы публикуете данные формы через $_POST, она обработаетданные.

1 голос
/ 25 января 2011

Я обычно делаю перенаправление на предыдущую страницу, поскольку это мешает пользователям обновить (и дважды отправить) свои данные.

Вы можете использовать вспомогательную функцию redirect() CI.

http://codeigniter.com/user_guide/helpers/url_helper.html (внизу)

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