Вопроса/краткое введениеCodeIgniter - Контроллер загрузка различных представлений (URL/Routing?)
Я недавно начал использовать CodeIgniter, и я очень новый для всей архитектуры MVC, поэтому я Я попрошу вас поговорить со мной здесь.
Что я сейчас делаю, это простая система регистрации/входа в систему (которая, очевидно, будет расширена позже). У меня есть контроллер с именем Users
, который имеет в основном две функции. Один из них - show_register()
, а один - send_register()
. Это сопряжено с моделью User_Model
, так называемой Фабрикой UserFactory
и в настоящее время (в основном для тестирования, позже они будут объединены) три вида register_success
, register_fail
и show_register
. Они в основном представляют собой одно мнение: «Эй, поздравляю, тебе удалось зарегистрироваться», один из них сказал «О, нет, не регистрируйся!». и один для показа фактической регистрационной формы.
После заголовка на http://url.com/register, вы автоматически показываете регистрационную форму (сделанной путем маршрутизации с помощью $route['register'] = 'users/show_register';
).
Итак, как только вы заполните форму в show_register
, действие формы приводит к функции send_register
в контроллере Users
. Ввод проверяется, и если все верно, оно отправляется на UsersFactory
для ввода базы данных. Если все хорошо, контроллер получает «true» назад в результате и отображает соответствующее представление. Это наша проблема!
Если мне удастся зарегистрироваться, мой URL-адрес сейчас: http://url.com/public/users/send_register. В общей папке я храню файлы, и я понял, что нужно удалить из URL-адреса через htaccess, и я найду свой способ о том, как это сделать. Проблема в том, что я не хочу, чтобы мой URL-адрес состоял из пользовательского контроллера и функции send_register. Я хочу, чтобы он оставался http://url.com/register/, но показывал другое представление.
То, что я пытался/заглянула в
Я посмотрел в маршрутизации в первую очередь. Я понимаю (надеюсь, я прав по этому поводу, иначе мне нужно научиться читать), что это не сработает для проблемы, которую я описал. Основной причиной этого является то, что он принимает все, что я укажу, и отправляет их определенному классу/функции. В этом случае то, что мы делаем, уже идет к правильному классу/функции, но пользователю отображается неправильный URL. Это также сложно, так как у меня есть разные методы внутри этого контроллера, что означает, что я не могу статически отображать все действия, чтобы привести к одной функции.
Я также изучил .htaccess, но я не нашел способа написать его. В хорошем смысле, я буду иметь свой файл .htaccess внизу внизу, если это поможет. Все, что я сделал, это изменить так, чтобы index.php-файл удалялся из URL-адреса.
файл .htaccess
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
Если есть какие-либо другие файлы, которые вы хотели бы, чтобы я показал, я с удовольствием это делать. На данный момент все, что я могу думать о том, что может быть актуальным, - это сам контроллер.
<?php
if (! defined('BASEPATH')) exit('No direct script access allowed');
class Users extends CI_Controller {
public function show_register()
{
$this->load->view("show_register");
}
public function send_register()
{
// Populate the model with the information we got from the form.
$data = array(
'user_name' => $this->input->post('username'),
'user_pass' => $this->input->post('password'),
'user_email' => $this->input->post('email'),
'user_level' => 1
);
// Then pass that on to the User Factory, which will insert that into the database.
$this->load->library("UserFactory");
if($this->userfactory->registerUser($data))
{
$this->load->view("register_success");
}
else
{
$this->load->view("register_fail");
}
}
}
?>
Это определенно один из способов сделать это! Мне, однако, немного любопытно, как это сделать в противном случае. Я бы хотел избежать как можно большего количества логики в представлении, и у меня возникло ощущение, что более сложные сценарии появятся, когда я пойду туда, где это будет не так просто, как сообщение об успехе/ошибке. Спасибо, хотя, я уверен, что это учитывается! – CmdrSharp
Хорошо, другим способом было бы использовать метод 'redirect()'. Вы можете сделать отдельные функции в вашем контроллере для 'register_success()' и 'register_fail()', сделать «redirect (Users/register_success)» и добавить эти два к маршрутам, как вы объясняли до – acupajoe
Спасибо! Я не уверен, почему я об этом не думал. Однако я решил не использовать перенаправление, но вместо этого просто иметь функцию register этого класса обрабатывать несколько сценариев. Спасибо, что вернули меня в нужное русло! – CmdrSharp