2010-12-05 3 views
2

Можно ли вызвать функцию, которая находится в контроллере с точки зрения?CodeIgniter - вызов функции изнутри вида

Это то, что я имею в моем контроллере, в качестве примера

function checkKeyExists($userid, $key){ 
} 

Тогда внутри мой взгляд, у меня есть следующие

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

Но когда я запускаю его, он говорит, что checkKeyExists не является определены.

Если кто-нибудь может сообщить мне, как я мог это сделать, это было бы здорово.

+2

Прошло более одного года, и вы все еще не принимали ответа ... – 2012-08-16 01:13:41

ответ

12

Представления не предназначены для вызова действий контроллера. Переверните свою логику, вызовите эту функцию в контроллере и установите ее в переменную, которую вы отправили на просмотр. Тогда вы можете заставить оператор if проверить эту переменную в вашем шаблоне просмотра.

Если это не работает для вас, может быть, помощник, что вам нужно: http://ellislab.com/codeigniter/user-guide/general/helpers.html

+0

Код, находящийся внутри представления, также находится в цикле foreach и динамически преобразует переменные, поэтому я не могу запустить его, поскольку страница отображается ... Означает ли это, что я должен сделать ее помощником? и можете ли вы вызвать модель из помощника? – Chris 2010-12-05 04:12:11

+0

Зачем вам нужно называть модель от помощника?Вы можете вызвать модель из своего представления и иметь метод checkKeyExists() в своей модели, но это не рекомендуется. – Shivaas 2010-12-09 07:19:29

2

Ваш контроллер должен передать набор данных на ваш взгляд.

Ваш взгляд может затем проверить, установлено ли что-то, а затем действовать соответствующим образом.

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

Затем на ваш взгляд:

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

Как Widox сказал, я думаю, что Helper это лучший выход. Что-то вроде этого:

<?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; 
    } 
} 

?> 

Тогда вы можете свободно использовать на ваших взглядов, просто загружаются в своих соответствующих контроллеров, как: $ this-> load-> помощник («Test») ;.

1

вы можете объявить функцию таким образом, внутри просмотров:

$myfunction = function_that_do_something() { 
} 

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

единственное, что вы не можете Acces переменные из функции -> просто передать их функции

0

Таким образом, гладкая ,

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

@view 
echo $fnc(); 
0

Контроллер:

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

Вид:

$controller->xyz(); 
0

Вызов функции контроллера из поля зрения не является хорошей идеей. это против роли MVC. Но вы можете вызвать функцию Model из представления. Другие ответы на этот вопрос доступны. here

Смежные вопросы