2010-12-05 20 views
2

Kann eine Funktion, die sich in einer Steuerung befindet, aus einer Sicht aufgerufen werden?CodeIgniter - Aufruf einer Funktion aus einer Sicht

Dies ist, was ich in meinem Controller haben, als Beispiel

function checkKeyExists($userid, $key){ 
} 

Dann in meiner Ansicht i

if(checkKeyExists($row->id, $role->key)){ 
} 

folgendes haben Aber wenn ich es laufen, heißt es, dass checkKeyExists nicht definiert.

Wenn mir jemand sagen kann, wie ich das machen könnte, wäre das großartig.

+2

Mehr als ein Jahr ist vergangen und Sie haben immer noch keine Antwort akzeptiert ... –

Antwort

12

Ansichten sind nicht dazu gedacht, Controller-Aktionen aufzurufen. Kehren Sie Ihre Logik um, rufen Sie diese Funktion im Controller auf und legen Sie sie auf eine Variable fest, die Sie an die Ansicht gesendet haben. Dann können Sie die if-Anweisung in Ihrer View-Vorlage überprüfen lassen.

Wenn das nicht für Sie arbeiten, vielleicht ein Helfer ist, was Sie brauchen: http://ellislab.com/codeigniter/user-guide/general/helpers.html

+0

Der Code, der in der Ansicht ist, ist auch in einer foreach-Schleife und ruft die Variablen dynamisch, also kann ich es nicht ausführen, während die Seite gerendert wird ... Bedeutet das, dass ich es zu einem Helfer machen muss? und können Sie ein Modell von einem Helfer anrufen – Chris

+0

Warum möchten Sie ein Modell von einem Helfer anrufen?Sie können das Modell aus Ihrer Sicht aufrufen und die Methode checkKeyExists() in Ihrem Modell verwenden, dies wird jedoch nicht empfohlen. – Shivaas

+0

ärgerlich die richtige Antwort –

2

Ihr Controller eine Reihe von Daten zu Ihrer Ansicht passieren sollte.

Ihre Ansicht kann dann testen, ob etwas eingestellt ist und dann entsprechend handeln.

$this->data['my_setting']='value'; 
$this->load->vars($this->data); 
$this->load->view('your_view'); 

Dann Ihrer Ansicht:

if(isset($my_setting)){ 
    do something with my_setting 
} 
5

Wie Widox sagte, ich glaube, ein Helfer der beste Weg ist, aus. Etwas wie folgt aus:

<?php // test_helper.php 
if(!defined('BASEPATH')) exit('No direct script access allowed'); 

function checkKeyExists($userid, $key, $table) 
{ 
    $CI =& get_instance(); 

    $query = $CI->db->query("SELECT $keyFROM $table WHERE id = $userid LIMIT 1"); 
    if($query->num_rows() > 0) 
    { 
     return true; 
    }else 
    { 
     return false; 
    } 
} 

?> 

Dann sind Sie frei auf Ihre Ansichten verwenden, laden Sie einfach Ihre entsprechenden Steuerungen wie: $ this-> last-> Helfer (‚test‘) ;.

1

Sie eine Funktion auf diese Weise Innenansichten erklären können:

$myfunction = function_that_do_something() { 
} 

// then call as you want 
$myfunction(); 

die einzige Sache ist, dass Sie nicht die Variablen aus der Funktion acces können -> einfach sie

an die Funktion übergeben
0

Auf diese Weise glatt .

@controller method 
$obj = array(); 
$obj['fnc'] = function(){ return 'hello'; }; 
$this->load->view('your_path', $obj); 

@view 
echo $fnc(); 
+0

Beachten Sie, dass die Funktion außerhalb des Controllerbereichs liegt, verwenden Sie also $ CI = & get_instance() anstelle von $ this –

0

Controller:

public function xyz(){ 
    $data['controller'] = $this; 
    $this->load->view('your_view_file',$data); 
} 

Ausblick:

$controller->xyz(); 
0

eine Controller-Funktion aus Sicht aufrufen, ist keine gute Idee. es gegen die MVC-Rolle. Aber Sie können die Modellfunktion aus der Sicht aufrufen. Weitere Antworten zu dieser Frage sind verfügbar here

Verwandte Themen