Лучшая практика 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
Я всегда использовал первый. Я также выполняю всю работу в своем контроллере и оставляю модель для взаимодействия с БД. Я не думаю, что есть окончательный ответ. Используйте то, что право на работу.