簡體   English   中英

Codeigniter MVC - 在不丟失控制器數據和表單驗證的情況下加載視圖

[英]Codeigniter MVC - Loading views without losing controller data and form validation

關於MVC在codeigniter中的工作原理,這對我來說沒有意義。 我使用example.com/company/加載'controller / Company.php'

function index() {
    $page = uri_string();
    $data['title'] = ucfirst($page);

    $this->load->view('templates/header', $data);
    $this->load->view('templates/top_nav', $data);
    $this->load->view($page, $data);
    $this->load->view('templates/footer', $data);
}

這會加載'views / company.php'並顯示表單:

<h1 class="page-title"><?php echo $title; ?></h1>
    <?php echo form_open('company/update', 'class="form-horizontal" role="form"'); ?>
<input name="company_name" type="text">
    <?php echo form_error('company_name'); ?> //if empty display error
         //rest of form and submit button

然后我在公司控制器內部有一個更新功能:

 function update() {
    $this->form_validation->set_rules('company_name', 'Company Name', 'trim|required');
       if ($this->form_validation->run() == FALSE)
       {  
           $this->load->view('company');
       } else {
           //update db, load model, post data, success, etc
       }
}

我的問題是:

  1. 如果我只是再次加載表單視圖,那么我會丟失標題,導航,頁腳等。
  2. 如果我重新聲明所有這4個視圖,我將丟失原始數據變量:$ title,$ page
  3. 如果我使用重定向('公司'); 再次加載控制器然后我將丟失提交的數據和form_error('company_name'); 會是空的

我希望我錯過了一些重要的東西,因為我一整天都在盯着這個並尋找答案,但找不到一個關於如何在“現實世界”中工作的教程謝謝

當然是。 控制器方法在項目中充當單個函數。

如果我解釋得更多

<?php
    public function one()
    {
        echo '1';
    }

    public function two()
    {
        echo '2';
    }

在這里功能one人不知道什么是功能two 所以這兩個功能都是獨立的

根據你的問題

你在index()加載這個視圖

$this->load->view('templates/header', $data);
$this->load->view('templates/top_nav', $data);
$this->load->view($page, $data);
$this->load->view('templates/footer', $data);

但是在update()你只加載

$this->load->view('company');

所以在第二個函數中沒有標題,導航和頁腳。

你的問題的答案是

<?php
    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('templates/header', $data);
        $this->load->view('templates/top_nav', $data);
        $this->load->view('company');
        $this->load->view('templates/footer', $data);

    } else
    {
        //update db, load model, post data, success, etc
    }

對於問題二

你可以這樣使用

<?php
    if ($this->form_validation->run() == FALSE)
    {
        $page = uri_string();
        $data['title'] = ucfirst($page);

        $this->load->view('templates/header', $data);
        $this->load->view('templates/top_nav', $data);
        $this->load->view('company');
        $this->load->view('templates/footer', $data);

    } else
    {
        //update db, load model, post data, success, etc
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM