CodeIgniter: die Weitergabe von Argumenten von View und Controller?
EDIT: Mit dem code unten nun, ich bin nicht sicher, wie drucken Sie die Lesezeichen und die tags richtig
Bin ich komplett neue CI und ich haben kürzlich auf einer Straße zu blockieren. Ich bin sehr unsicher, wie ich gehen würde, über die übergabe eines Funktions-Argumentes vom view-Datei an den controller, so konnte ich es verwenden, für eine Funktion?
Habe ich eine foreach-Schleife auf die Sicht werde durch die alle Elemente übergeben durch die Funktion get_latest_bookmarks. Die Funktion gibt eine ID für jedes Element, und ich bin zu wollen, verwenden Sie diese mit einer anderen Funktion aufgerufen get_bookmark_tags, die die tags der Lesezeichen aus einer anderen Tabelle. Ich habe den code habe ich getan so weit unten.
Modell:
<?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;
}
Controller:
<?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);
}
}
Anzeigen:
<h1>Latest Bookmarks</h1>
<?php foreach ($bookmarks_latest as $bookmark): ?>
<?php print_r($bookmark); ?>
<?php print_r($tags_latest->result()); ?>
<?php endforeach; ?>
- es kann ein Weg, dies zu tun, aber Daten fließen sollen von der Steuerung, um die Ansicht und nicht die andere Weise herum.
- Könnte jemand die Antwort gewusst wie: übergeben Sie das argument aus view und controller zum Beispiel das schreiben im Hinblick auf das funktionieren nicht
<?=form_open("Welcome/bookmark_tags($id)";?>
wenn $id-argument ist ein array, dann wie wir wird übergeben
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie tun sollten, die in Ihrem Controller, bevor Sie die Weitergabe der Daten an die View.
Versuchen Sie mit so etwas wie dies:
$data['query'] = $bookmarks;
vor dem laden der Ansicht, wenn Sie wollen.print_r($tags);
undprint_r($bookmarks);
jetzt in Ihre Ansicht. Und Sie können Durchlaufen werden.Sie nicht.
Den Punkt in der Verwendung eines Framework ist standardmäßig für den entsprechenden Normen. CodeIgniter folgt eine lose MVC-Muster, aber Sie sollte nie passieren Dinge, die aus der view in den controller.
Sie können es tun, aber wenn Sie es tun, Sie werden immer in einem spaghetti-Chaos ziemlich bald.
Schnappen Sie sich die ID ' s auf dem controller. Auch wenn es impliziert die Ausführung der Schleife zweimal. Sie bedanken sich letztere auf.