我还是mvc的新手,使用codeigniter框架处理项目。我搜索了很多教程和stackoverflow帖子,我仍然找不到一个简单问题的简单答案。如何从视图中调用控制器。它只是来自每个视图页面的ajax调用并POST所需的控制器URL吗?
我理解mvc的概念但是根本无法找出基于在视图上选择内容来调用控制器的最佳方法。也许这只是一个简单的ajax调用,而我是在过度思考它,但对此事的一些澄清将不胜感激。
示例:
我已加载表单视图。当用户选择' next'表单上的按钮我希望调用控制器,在表单后加载下一个视图。您是否只是在单击按钮时触发控制器URL的POST?这是我的问题。也许这是做到这一点的方法,但在我读过的任何地方都没有澄清过。
答案 0 :(得分:1)
您缺少的实际上是routing
结构,这决定了控制器如何根据特定的URL请求加载视图。
说你有这个网址:example.com/products
这将寻找类Products
的控制器。此外,默认情况下,它将默认在控制器中查找名为index
的函数。我们还想从我们的products
表中删除所有产品,因此我们需要拥有相关的模型。让我们来看看它的样子:
class Products extends CI_Controller {
public function index(){
//load our Products model
$this->load->model('Model_products');
//let's get all of our products off of our model
$data['products'] = $this->Products->all();
//now let's return all of our products with our view `products`
$this->load->view('products', $data);
}
}
当然,我们需要application/models/products_model.php
中的关联模型,并使用all
函数从数据库中检索所有products
。
class Products_model extends CI_Model {
public function __construct(){
parent::__construct():
}
public function all(){
return $this->db->get('products');
}
}
希望这有助于您清楚了解MVC模式如何与internal routing
一起使用。
答案 1 :(得分:1)
如前所述,您不能正常从视图中调用控制器。这违背了MVC。您可以做什么,如果我的问题正确,您可以添加一个指向您的控制器的URL作为您的选择选项标记的值。比你可以处理从javascript选择作为onselect事件。您只需将所选值提供给window.location.href,您将被重定向到您的控制器。
答案 2 :(得分:0)
根据mvc标准,视图不应直接访问控制器方法。如果要将另一个类方法结果带到视图中,则应在控制器中调用它并将其存储在变量中,以便可以在视图中访问它。
使用代码点火器的示例:
['a1', 'a2', 'a3', 'a4', 'b1', 'b2', 'b3', 'b4']
然后:
//controller:
$data = array(
'name' => 'Carlos',
);
$this->load->view('myview', $data);