Codeigniter MVC - 在不丢失控制器数据和表单验证的情况下加载视图

时间:2015-06-30 00:25:39

标签: php codeigniter

对于MVC在codeigniter中的工作原理,这对我没有意义。 我使用example.com/company /

加载'controller / Company.php'
transparent

这会加载'views / 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);
}

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

<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

我的问题是:

  1. 如果我只是再次加载表单视图,那么我会丢失标题,导航,页脚等。
  2. 如果我重新声明所有这4个视图,我会丢失原始数据变量:$ title,$ page
  3. 如果我使用重定向('公司');再次加载控制器然后我将丢失提交的数据和form_error('company_name');将是空的
  4. 我希望我错过了一些重要的东西,因为我一整天都在盯着这个并寻找答案但却无法找到一个关于如何在“现实世界”中工作的教程谢谢

1 个答案:

答案 0 :(得分:1)

当然可以。控制器方法在项目中充当单个函数。

如果我解释得更多

<?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
    }