CodeIgniter:将视图中的参数传递给控制器?
编辑:现在下面的代码,我不确定如何正确打印书签和标签
我对CI很陌生,最近我遇到了一个障碍。 我很不确定如何将视图文件中的函数参数传递给控制器,以便我可以在函数上使用它?
我通过函数get_latest_bookmarks传递的所有项目在视图上有一个foreach循环。 该函数返回一个ID为每个项目,我想与另一个函数称为get_bookmark_tags这将从另一个表中获取书签的标签。 我已经提供了我在下面所做的代码。
模型:
<?php
class Bookmark_model extends CI_Model {
function __construct()
{
parent::__construct();
}
function get_latest_bookmarks($limit)
{
// Load Database
$this->load->database();
// Query Database
$query = $this->db->get('Bookmark', $limit);
// Return Result
return $query;
}
function get_bookmark_tags($id)
{
// Load Database
$this->load->database();
$query = $this->db->query('SELECT Tag.Title
FROM `Tag`
INNER JOIN BookmarkTag
WHERE BookmarkTag.BookmarkID = "'.$id.'" AND Tag.TagID = BookmarkTag.TagID');
return $query;
}
控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
// Load URL Helper
$this->load->helper('url');
// Load User Library
$this->load->library('ion_auth');
// Is User Logged In
if ($this->ion_auth->logged_in())
{
$data['user'] = $this->ion_auth->get_user_array();
}
else
{
redirect('auth/login');
}
// Load Bookmark Model
$this->load->model('Bookmark_model');
// Create Arrays
$bookmarks = array();
$tags = array();
// Query Database
$query = $this->Bookmark_model->get_latest_bookmarks(4);
//
foreach ($query->result() as $row) {
array_push($tags, $this->Bookmark_model->get_bookmark_tags($row->BookmarkID));
array_push($bookmarks, $row);
}
$data['tags_latest'] = $tags;
$data['bookmarks_latest'] = $bookmarks;
$this->load->view('welcome_message', $data);
}
}
视图:
<h1>Latest Bookmarks</h1>
<?php foreach ($bookmarks_latest as $bookmark): ?>
<?php print_r($bookmark); ?>
<?php print_r($tags_latest->result()); ?>
<?php endforeach; ?>
在将数据传递给View之前,您应该在Controller中执行此操作。 试试这样的事情:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Welcome extends CI_Controller {
public function index()
{
// Load Model
$this->load->model('Bookmarks');
// Get Latest Bookmarks
$query = $this->Bookmarks->get_latest_bookmarks(4);
$bookmarks = array();
$tags = array();
foreach ($query->result() as $row) {
$bookmark_query = $this->Bookmarks->get_bookmark_tags($row->id);
$bookmark_arr = array();
foreach (bookmark_query->result() as $bookm) {
array_push($bookmark_arr, $bookm);
}
array_push($tags, $bookmark_arr);
array_push($bookmarks, $row);
}
$data['tags'] = $tags;
$data['bookmarks'] = $bookmarks;
// Load and Pass Data into View
$this->load->view('welcome_message', $data);
}
}
你没有。
使用框架的重点是默认适当的标准。 CodeIgniter遵循一个松散的MVC模式,但不应该将视图中的东西传递给控制器。
你可以做到,但如果你这样做,你很快就会陷入意大利面条混乱。
抓住控制器上的ID。 即使它牵涉到两次运行相同的循环。 你会感谢后者。
链接地址: http://www.djcxy.com/p/52905.html上一篇: CodeIgniter: Passing Arguments from View to Controller?
下一篇: Are there Delphi object serialization libraries with support for Generics?