【问题标题】:Codeigniter MVC - Loading views without losing controller data and form validationCodeigniter MVC - 在不丢失控制器数据和表单验证的情况下加载视图
【发布时间】:2015-06-30 00:25:38
【问题描述】:

对于 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. 如果我使用redirect('company');再次加载控制器,然后我会丢失提交的数据和 form_error('company_name');将是空的

我希望我错过了一些重要的东西,因为我整天都在盯着它寻找答案,但找不到关于所有这些在“现实世界”中如何工作的教程谢谢

【问题讨论】:

  • 您能提供您将使用的不同网址的示例吗?例如:example.com/company/example.com/company/nameexample.com/company/name2?还是怎么做?

标签: php codeigniter


【解决方案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
    }

【讨论】:

  • 如果我的回答有帮助,请接受或投票。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 2015-07-31
  • 2015-03-13
相关资源
最近更新 更多