2011-10-25 128 views
0

我有两个方法在我的控制器内,一个负责生成注册页面,另一个负责处理注册表单提交。现在如何在CodeIgniter的2种方法中创建一个变量?

<?php 

class Signup_c extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 
    } 

    function index() { 
     $data['title'] = 'Sign Up'; 

     $data['months'] = array(
      '1' => 'January', 
      '2' => 'February', 
      '3' => 'March', 
      '4' => 'April', 
      '5' => 'May', 
      '6' => 'June', 
      '7' => 'July', 
      '8' => 'August', 
      '9' => 'September', 
      '10' => 'October', 
      '11' => 'November', 
      '12' => 'December' 
     );  

     $this->load->view('signup_v', $data); 
    } 

    function submit() { 

      // validation rules here... 

     // validate 
     if ($this->form_validation->run() === FALSE) { 
      $this->load->view('www/signup_v'); 
     } 
     else { 
        // add info to database here... 

      $this->load->view('www/signup_success_v'); 
     } 

    } 

} 

的问题是这样的,如果有一个验证错误,那么用户返回到注册页面,并显示验证错误。但是没有显示标题或日期,因为这些变量是在index()方法内定义的,而不是submit()方法。

什么是最好的解决方案,我不想重复我的自我,并复制这些注册方法中的2个变量声明。有两种方法可以使它在两种方法的观点上都有效吗?

回答

1

为什么不分配类变量?结构前:

$title = 'Whatever'; 
$months = array('january', 'february'); 

那么你的方法里面有这个 - $> title和$这个 - >个月

另外访问它们,为什么不回发到你的指数法和收到做后期处理还要别的吗?所以你的指数方法开始是这样的:

if(!empty($_POST)) 
{ 
    // do some kind of validation here 
    // or call a private method in this class and set your class vars accordingly 
} 
0

您可以节省validation_errors();某些变量,像sessions flashdata,如:

$this->session->set_flashdata('errors', validation_errors()); 

,然后附和他们的形式上面(例如)。我认为这是更好的做法。

顺便说一句。您必须为此加载会话模块

+0

据我所知,这不是他要问的。 – middus

0

如果数据保持不变(即静态),那么如何将数据存储在静态数组中?

<?php 
class Signup_c extends CI_Controller { 
    // private because no one else needs to access this 
    private static $data = array('title' => 'Sign Up', 'months' => array(...)); 

    function __construct() { 
     parent::__construct(); 
    } 

    function index() { 
     $this->load->view('signup_v', Signup_c::$data); 
    } 

    function submit() { 
     // validation rules here... 
     // validate 
     if ($this->form_validation->run() === FALSE) { 
      $this->load->view('www/signup_v', Signup_c::$data); 
     } 
     else { 
      // add info to database here... 
      $this->load->view('www/signup_success_v'); // maybe add it here, too? 
     } 
    } 
} 

或者,将用户重定向回索引可能是有意义的。不幸的是,我对CI没有太多了解,所以我不适合就此提出建议。

想到的另一件事是:为什么你需要在你的控制器有一个月的阵列?我相信有更好的方法来做到这一点。人们可以考虑将其放在模板中。毕竟,几个月不会改变,还是我忽略了一些东西?

相关问题