2016-05-29 3 views
1

Я пытаюсь вызвать функцию в одной из своих моделей, но я хотел бы сделать это, не пройдя через контроллер, возможно ли это? код приведен ниже не работает, я получаю 404 Not Foundкод CodeIgniter с ajax

Javascript:

$.ajax({ 
    type: "POST", 
    url: "/myApplication/usersModel/get_cash_player", 
    success: function(result){ 
     alert("ok"); 
    } 
}); 

Моя модель (находится в usersModel.php):

public function get_cash_player(){     
    $currentUserID = $this->usersModel->get_user_id(); 
    $query = $this->db 
     ->select('cash') 
     ->from('users') 
     ->where('id_player', $currentUserID) 
     ->get(); 
    return $query->row('cash');  
} 

В качестве альтернативы я мог бы создать контроллер вызова метод в модели, но я хотел бы знать, возможен ли этот ярлык.

Обновление 1: Хорошо, теперь наступает следующий вопрос. Для некоторых из моего контроллера я использую специальный помощник, потому что я хочу, чтобы они были доступны в нескольких контроллерах. Это нормально работает при вызове через PHP, но могу ли я создать его для контроллера get_cash_player, упомянутого выше (и в комментариях), и вызвать его через Ajax?

Я попытался это, но она до сих пор не найдено:

if(!function_exists('get_cash_player')){ 
    function get_cash_player(){ 
     $ci=& get_instance(); 
     $cash = $ci->usersModel->get_cash_player(); 
     return $cash; 
    } 
} 
+2

Этот подход не подходит в подходе CI MVC. Это связано с тем, что свойство url AJAX пытается достичь 'example.com/имя_контроллера/method_name/param'. По соображениям безопасности невозможно достичь другого кода приложения через веб-браузер. – Tpojka

+2

«В качестве альтернативы я мог бы создать контроллер, вызывающий метод в модели, но я хотел бы знать, возможен ли этот ярлык». Это то, что вам нужно/нужно делать. Модель не (или не должна быть) доступна из браузера (AJAX или нет), то есть ваш уровень данных. –

ответ

1

Непосредственно вызов модели невозможен, контроллер всегда обрабатывает процесс в и из вида и модели. Это правильный Codeiginter MVC подход,

workflow Источник: https://ellislab.com/codeigniter/user-guide/overview/appflow.html

ссылка также может помочь вам https://ellislab.com/codeigniter/user-guide/overview/mvc.html

Но, вы можете сделать так: использовать функцию Ajax для вызова функции контроллера для передачи данных через. Контроллер обработает процесс с помощью модели и вернет данные обратно в функцию ajax.

0

Нет, это не возможно. Все входящие запросы сервера направляются на контроллеры.

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