MVC の概念を理解し、一度に複数のフォームを表示する際に根本的な問題があります。さまざまな方法を試しましたが、まだ行き詰まっています。それは、CI と MVC を正しく理解していないと思うからです。
2 つの異なるフォームに対して 2 つの異なるビューを使用してみました。うまくいきませんでした。コントローラーでフォームごとに 1 つの関数を使用してみました。それもうまくいきませんでした。どうすればいいのかわからない。
私はこれを行う必要があります。
- コントローラーを作成し、その中に index() 関数を含めます。
- この index() 内の各フォームのフォーム要素を構築します
- 両方のフォームを表示する 1 つのビューを作成し、index() 内から呼び出す
- form_open を使用して、送信アクションを別の関数に指示します - それを validate() と呼びます
- 入ってくるものすべてを検証し、エラーを送り返します
- どういうわけか、これは私が得られない主なビットですが、フォームが正しく入力されている場合はアクションを完了してください。
6 私の最大の問題です。それを行う方法がわかりません。たとえば、フォームが正常に完了したら、ユーザーに選択した場所にディレクトリを作成してもらいたいので、mkdir() を使用しています。そのため、validate() 関数内に if ステートメントが必要ですか??
アップデート
これまでに作成したコードは次のとおりです。
コントローラ:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
// Forms CodeIgniter コントローラ クラス Admin extends 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();
}
}
}
//*************************************************//
}
ここに 1 つのビュー (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 を返すためです。他のフォームのフォーム要素を見ている可能性があると思います-これはすべきではありません。私は何が欠けていますか?