我是CodeIgniter的新手。我需要处理一个表格。我在视图中有一个form.html页面
<html>
<head>
<title>Search</title>
</head>
<body>
<form action="search">
<input type="text" name="search" value="" size="50" />
<div>
<input type="submit" value="Submit" />
</div>
</form>
</body>
</html>
和表单控制器
class Form extends Controller {
function Form() {
parent::Controller();
}
function index() {
$this->load->view('form');
}
}
我有一个视图文件search.php但是当它被处理时它显示找不到页面......
答案 0 :(得分:32)
在 M .odel V .iew C .Introller设置,如CodeIgniter,视图是用户界面元素。他们不应该解析结果。
如果我没有弄错的话,您要做的是将数据从www.yoursite.com/index.php/form
传递到www.yoursite.com/index.php/search
在非结构化的php中,您可能有 form.html
,其表单操作为 search.php
。用户可以导航到yoursite.com/form.html
,这会调用yoursite.com/search.php
,这可能会重定向到yoursite.com/results.php
。
在CodeIgniter中(据我所知,在任何MVC系统中,无论语言如何),您的Controller,Form
都会调用一个加载form.html
{{3}的函数} 自身,然后运行它。 View生成用户与之交互的代码(通常是HTML,但不一定)。当用户发出View无法处理的请求(请求更多数据或其他页面)时,它会将该请求传递回Controller,后者会加载更多数据或其他View。
换句话说,视图决定了数据的显示方式。 Controller将请求映射到Views。
如果要在视图中显示复杂和/或更改的数据,则会稍微复杂一些。为了维护MVC要求的 View ,CodeIgniter还为您提供了separation of concerns。
模型负责任何Web应用程序中最困难的部分 - 管理数据流。它们包含读取数据,写入数据的方法,最重要的是确保数据完整性的方法。换句话说,模型应该:
Models有一个很好的图形,列出了MVC的组件:
话虽这么说,最简单的(阅读“最简单”,而不是“最可扩展”)的方式来完成你想要做的事情是:
function Form()
{
parent::Controller();
}
function index()
{
$this->load->view('form');
}
function search()
{
$term = $this->input->post('search');
/*
In order for this to work you will need to
change the method on your form.
(Since you do not specify a method in your form,
it will default to the *get* method -- and CodeIgniter
destroys the $_GET variable unless you change its
default settings.)
The *action* your form needs to have is
index.php/form/search/
*/
// Operate on your search data here.
// One possible way to do this:
$this->load->model('search_model');
$results_from_search = $this->search->find_data($term);
// Make sure your model properly escapes incoming data.
$this->load->view('results', $results_from_search);
}
答案 1 :(得分:10)
如果没有控制器加载和显示它,查看文件就没用了。您必须创建一个控制器来接收表单数据,处理它,然后显示处理结果。
您可以使用表单助手设置表单开放标记,也可以使用关闭标记:
<?php echo form_open('form/search'); ?>
<input type="text" name="search" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
<?php echo form_close(); ?>
不使用表单助手,你仍然可以这样写:
<form action="<?php echo site_url('form/search'); ?>">
然后将search
方法添加到form
控制器:
function search()
{
//get form field
$search = $this->input->post('search');
// do stuffs here
//...
}
请记住,CI仅对基本代码组织提供帮助,并提供有用的库和帮助程序。但是您仍然需要在您的站点中编写该过程的算法。
不要忘记阅读下载的codeigniter包中附带的用户指南。你可以从那里的例子中学到很多东西。不要犹豫,在这里询问你不知道的事情,stackoverflow的许多成员都会帮助你。
答案 2 :(得分:1)
这是表单验证并在控制器中提交 我的整个控制器类
class MY_Controller extends CI_Controller {
function __construct()
{
parent::__construct();
$this->load->library(array('session','form_validation'));
$this->load->helper(array('form', 'url', 'date'));
//$this->load->config('app', TRUE);
//$this->data['app'] = $this->config->item('app');
}
}
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Article extends MY_Controller {
function __construct() {
parent::__construct();
$this->load->model('article_model');
}
public function index() {
$data['allArticles'] = $this->article_model->getAll();
$data['content'] = $this->load->view('article', $data, true);
$this->load->view('layout', $data);
}
public function displayAll() {
$data['allArticles'] = $this->article_model->getAll();
$data['content'] = $this->load->view('displayAllArticles', $data, true);
$this->load->view('layout', $data);
}
public function displayArticle($id) {
$data['article'] = $this->article_model->read($id);
$data['articleId'] = $id;
$data['comment'] = $this->load->view('addComment', $data, true);
$data['content'] = $this->load->view('displayArticle', $data, true);
$this->load->view('layout', $data);
}
public function add() {
$this->form_validation->set_message('required', '%s is required');
$this->form_validation->set_rules('title', 'Title', 'required|xss_clean');
$this->form_validation->set_rules('description', 'Description type', 'required|xss_clean');
$this->form_validation->set_error_delimiters('<p class="alert alert-danger"><a class="close" data-dismiss="alert" href="#">×</a>', '</p>');
if ($this->form_validation->run() == TRUE) {
$article = array(
'title' => $this->input->post('title'),
'description' => $this->input->post('description'),
'created' => date("Y-m-d H:i:s")
);
$this->article_model->create($article);
redirect('article', 'refresh');
} else {
$data['article'] = array(
'title' => $this->input->post('title'),
'description' => $this->input->post('description'),
);
$data['message'] = validation_errors();
$data['content'] = $this->load->view('addArticle', $data, true);
$this->load->view('layout', $data);
}
}
}
我们可以像这样使用普通的html表单。
<?php echo $message; ?>
<form method="post" action="article/add" id="article" >
<div class="form-group">
<label for="title">Article Title</label>
<input type="text" class="form-control" id="title" name="title" value="<?php echo $article['title']; ?>" >
</div>
<div class="form-group">
<label for="description">Description</label>
<textarea class="form-control" rows="13" name="description" id="description"><?php echo $article['description']; ?></textarea>
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
</div>
</div>
答案 3 :(得分:0)
尝试在动作中使用codeigniter“site_url”,以确保指向正确的位置。您的示例中的操作将转到“搜索”控制器而不是“表单”控制器。
<html>
<head>
<title>Search</title>
</head>
<body>
<form action="<?= site_url('form/process_search') ?>">
<input type="text" name="search" value="" size="50" />
<div><input type="submit" value="Submit" /></div>
</form>
</body>
</html>
index仅在你的控制器中使用时没有其他任何东西传递。所以在上面我的例子中你会想要这样的东西:
function Form()
{
parent::Controller();
}
function process_search()
{
print "<pre>";
print_r($_POST);
print "</pre>";
}
答案 4 :(得分:0)
Nettuts有一个很棒的CodeIgniter for Login表格教程。按照截屏视频进行操作,它将清除您的问题。
http://net.tutsplus.com/videos/screencasts/codeigniter-from-scratch-day-6-login/
答案 5 :(得分:0)
将此<form action="search">
替换为<?php echo form_open('form/search');?>
和autoload.php文件添加$autoload['helper'] = array('form');
然后文件不要使用文件search.php只需将您的search.php代码添加到您的Controller文件中 喜欢这里
class Form extends Controller {
function Form() {
parent::Controller();
}
function index() {
$this->load->view('form');
}
function search(){
//your code here
}
}