我在理解 MVC 的概念和一次显示多个表单方面遇到了一个基本问题。我尝试了多种方法,但仍然卡住了——那是因为我认为我没有正确理解 CI 和 MVC。
我尝试对两种不同的形式使用 2 种不同的视图。没用。我尝试在我的控制器中为每个表单使用一个功能。那也没有用。我不知道该怎么办。
我应该这样做吗?
- 创建一个控制器并在其中包含一个 index() 函数。
- 为这个 index() 中的每个表单构建我的表单元素
- 创建 1 个显示两种表单的视图并从 index() 中调用它
- 使用 form_open 将提交操作定向到另一个函数 - 调用它 validate()
- 验证所有进来的东西,发回错误
- 不知何故,这是我没有得到的主要内容,如果表格已正确填写,请完成一项操作。
6 是我最大的问题。不知道该怎么做。例如,在成功完成表单后,我希望我的用户在所选位置创建一个目录 - 所以我使用 mkdir() - 所以我需要在 validate() 函数中使用 if 语句还是什么?
更新
这是我到目前为止创建的代码;
控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
// 表单 CodeIgniter 控制器类 Admin 扩展 CI_Controller {
// Controller constructor
public function __construct()
{
parent::__construct();
// Load form helper required to validate forms
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
}
//*************************************************//
// Prepare data for the view to output the forms
public function index()
{
//*****************************************************//
//returns a drop down list of radio buttons, one for each directory
$map_one = $this->recursive_model->iterate_add_folder_names();
$data['folder_list_add'] = $map_one;
//****************************************************//
//*****************************************************//
//also returns a drop down list of radio buttons (slightly different), one for each directory
$map_two = $this->recursive_model->iterate_folder_names();
$data['folder_list_select'] = $map_two;
//****************************************************//
//load the views and the forms
$this->load->view('templates/header.php');
$this->load->view('admin/add_new_folder.php', $data);
$this->load->view('admin/add_new_file.php', $data);
$this->load->view('templates/small_footer.php');
}
//*************************************************//
//function if adding a new directory to the current structure
public function add_folder()
{
//need to select a directory for it to go under
$this->form_validation->set_rules('new_folder', 'New Folder', 'required');
//and name the new directory
$this->form_validation->set_rules('new_folder_name', 'New Folder Name', 'required');
if ($this->form_validation->run() === FALSE)
{
$this->index();
}
else
{
if($this->input->post())
{
$new_folder = $this->input->post('new_folder');
$new_folder_name = $this->input->post('new_folder_name');
$folder_path = "/var/www/html/mike/content".$new_folder."/".$new_folder_name;
mkdir($folder_path, 0777);
$this->index();
}
}
}
//*************************************************//
public function add_file()
{
//folder location and name of file
$folder_name = $this->input->post('folder_name');
$new_folder_name = $this->input->post('file_name');
//validation rules
$this->form_validation->set_rules('folder_name', 'Folder Name', 'required');
$this->form_validation->set_rules('file_name', 'File Name', 'required');
//if there is an error with validation
if ($this->form_validation->run() === FALSE)
{
//gets stuck here every time when trying to upload a new folder :(
$this->index();
}
//if there is not an error with validation
else
{
//$folder_name will be something like "http://www.example.com/publications/people/reports"
$config['upload_path'] = $folder_name;
$config['allowed_types'] = 'gif|jpg|png|html|pdf|xls';
$this->load->library('upload', $config);
//if file cannot be loaded (due to $config perhaps?)
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->index();
}
else
{
$data = array('upload_data' => $this->upload->data());
$this->index();
}
}
}
//*************************************************//
}
这是一个视图(add_new_file.php);
<div id="container">
<h1>Upload A File/Publication</h1>
<div id="body">
<?php //echo $error;?>
<?php echo form_open_multipart('admin/add_file');?>
<?php echo $folder_list_select; ?>
<input type="file" name="file_name" size="20" />
<input type="submit" value="upload" />
</form>
</div>
这是另一个(add_new_folder.php)
div id="container">
<h1>Add A New Folder</h1>
<div id="body">
<?php echo validation_errors(); ?>
<?php echo form_open('admin/add_folder');?>
<?php echo $folder_list_add; ?>
New Folder Name: <input type="text" name="new_folder_name">
<input type="submit" value="upload" />
</form>
</div>
我希望这有助于回答这个线程。
基本上,我可以让第一部分工作 - 添加文件夹 - 但我无法让添加文件工作。这是因为 if ($this->form_validation->run() === FALSE)总是返回 false。我认为它可能正在查看其他表单中的表单元素——它不应该这样做。我错过了什么?