Лучшая практика Codeigniter при доступе к $this-> input-> post()

Я уже некоторое время кодирую CodeIgniter, и когда я программирую или просматриваю другой код программиста, я обычно сталкиваюсь с двумя способами получения данных из ввода. Можно было бы получить ввод от контроллера, а затем перейти к модели в качестве параметра, например:

class MyController extends Controller
{
    .
    .
    .
    public function login()
    {
       $username = $this->input->post('username');
       $password = $this->input->post('password');
       $this->load->model('User');
       $this->User->login($username, $password);
    }
}

class User extends Model
{
    .
    .
    .
    public function login($username, password)
    {
      ....
    }
}

Другим будет доступ непосредственно от модели входных параметров, например:

class MyController extends Controller
{
    .
    .
    .
    public function login()
    {
       $this->load->model('User');
       $this->User->login();
    }
}

class User extends Model
{
    .
    .
    .
    public function login()
    {
       $username = $this->input->post('username');
       $password = $this->input->post('password');
    }
}

Как вы думаете, что лучше? Я склоняюсь к первому, поскольку он дает Модели больше независимости, но я вижу второй метод в примеры кодов и других разработчиков. По общему признанию, второй метод короче, особенно если вы принимаете 5-10 полей ввода.

Ответы

Ответ 1

Используя первый образец, вы разрешаете другим разработчикам изменять представления и изменять контроллеры, но при этом поддерживать модель "как есть". Это должен быть пример хорошего рефакторинга.

Выбирая второй образец, вы блокируете свою разработку в представлениях, так как имена ввода блокируются моделью, и вы предпочли бы изменить модель как можно меньше.

Другими словами...
первый образец: гибкий
второй образец: 'd * mnit, не снова!'

Ответ 2

Я знаю, что это спорно, но это, возможно, простое объяснение того, что CodeIgniter MVC на самом деле.

Модели - доступ к базе данных (CRUD)

Контроллеры - реализуют логику, вызовы библиотек и помощников и пропускают для просмотра

Представления - то, что пользователь видит

Библиотеки - функции, использующие модели

Помощники - функции, которые не требуют использования моделей

Вы не хотите добавлять login() внутри контроллера модели ИЛИ, я бы создал библиотеку для обработки функции login() который вызывает непосредственно модель.

Затем контроллер использует библиотеку, передает переменные $this- > input- > post, а затем отображает представления соответственно.

Более подробную информацию можно найти здесь: CodeIgniter MVC и Библиотека CodeIgniter

Ответ 3

Немного поздно, но для поддержания чистой модели (насколько это возможно) настройки переменных в вашей модели и при необходимости передавать аргументы. например,

class MyController extends Controller
{
    public function login()
    {
       $this->load->model('User');

       //Set your model variables, before executing the model function
       $this->User->username = $this->input->post('username');
       $this->User->pass = $this->input->post('pass');

       $this->User->login();

    }
}


class User extends Model
{

    var $username;
    var $pass;

    public function login()
    {
        $this->db->where('username', $this->username);
        $this->db->where('pass', $this->pass);
        etc...
    }

} 

Ответ 4

Я предпочитаю первый и оставляю процесс проверки и стандартизации данных в контроллерах.

Ответ 5

Я всегда использовал первый. Я также выполняю всю работу в своем контроллере и оставляю модель для взаимодействия с БД. Я не думаю, что есть окончательный ответ. Используйте то, что право на работу.