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?