Может ли пользователь сайта передать свои аргументы модельным функциям? - PullRequest
0 голосов
/ 23 мая 2011

Доступны ли функции внутри моделей напрямую пользователям? Может ли пользователь передавать аргументы непосредственно в функцию в модели? Или, нужно ли передавать аргументы через php?

Другими словами: У меня есть модель под названием уведомления, и там есть функция с именем get_notifs($user) ... Я использую контроллер для вызова такой функции, как get_notifs($_SESSION['user_id']) (которая зашифрована).Я не хочу, чтобы кто-то мог звонить get_notifs() с чем-либо, кроме своей $ _session в качестве аргумента.Какое лучшее решение?

  • Я уже в порядке?
  • Должен ли я переименовать get_notifs() в _get_notifs()?
  • Должен ли я проверять $_SESSION['user_id'] в самом методе?
  • Или есть другое лучшее решение

    , чем любое из них?

У меня есть контроллер: ajax.php, который загружает уведомление модели

    function __construct()
        {
        parent::__construct();
            $this->load->helper('url');
            $this->load->library('tank_auth');
            $this->load->model('notification');
            $this->load->model('search');
        }
function get_notifs()
    {
    $me = $this->session->userdata('user_id');
    if ($e = $this->notification->get_notif($me))
    {
 ...........
    }           
    else{
        echo "nothing was found wtf?";
    }

......................................................... модель: messages.php

function get_notifs($user){
......
}

Ответы [ 2 ]

1 голос
/ 23 мая 2011

Ваш код в порядке!

  • Я уже в порядке?
    • Мне так кажется
  • Должен ли я переименовать get_notifs() в _get_notifs()?
    • Нет, это публичный метод, поэтому нет необходимости делать его закрытым.
  • Стоит ли проверять $_SESSION['user_id'] в самом методе?
    • Нет, это работа контроллера
  • Или есть другое лучшее решение, чем любое из них?
    • Вам нужно только решение проблемы, и я не вижу здесь проблемы

звучит похоже, что ваше приложение может быть использовано другими людьмизатем вы сами, то есть общедоступные разработчики, почему вы хотите заставить разработчиков кодировать вещи по-своему, это расстроит их в вашем приложении.

CI Только направляет запросы контроллеру, пользователь не может получить доступ к моделиили библиотека или любой другой класс, маршрут идет так: /controller/method/param

первый сегмент будет только когда-либо загружать файл контроллера, второй вызовет метод в параметре, передавая любые другие переменные, такие как параметрк этому методу.enter image description here Источник: http://codeigniter.com/user_guide/overview/appflow.html

Как видно из приведенной выше блок-схемы, только контроллер имеет доступ к модели

0 голосов
/ 23 мая 2011

Если вы будете использовать его только во время сеанса, лучший способ будет следующим:

function get_notifs(){
    if(!isset($_SESSION['user_id'])){
        return false;
    }

    $user = $_SESSION['user_id'];

    /* Your code here */
}

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

Редактировать: я не знаю, почему вы используете функции в своих моделях.Не имеет никакого смысла, ты имеешь в виду методы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...