1

Вопроса/краткое введение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"); 
     } 
    } 
} 
?> 

ответ

0

Извиняется за то, что он так долго получил ответ!

Почему бы просто не позвонить ajax?

На ваш взгляд, где форма:

<div id="message_box" class="hidden"></div> 
<form id="theForm" method="post" action="submitForm()"></form> 

<script> 
function submitForm() { 
    $.post("<?= site_url('Users/send_register');?>", $("#theForm").serialize(), function(data) { 
     success: $("#message_box").html(data).show(); 
     error: $("#message_box").html("<p>There was an error with your request</p>").show(); 
    }); 
} 
</script> 

Есть, конечно, миллион различных способов сделать это. Но я предполагаю, что эти представления - это просто представления сообщений, как в случае коротких html успешных/неудачных (как вы сказали выше). Преимущество ajax состоит в том, что пользователь останется на странице, и вы спрячете свой url.

Надеюсь, что это поможет!

+0

Это определенно один из способов сделать это! Мне, однако, немного любопытно, как это сделать в противном случае. Я бы хотел избежать как можно большего количества логики в представлении, и у меня возникло ощущение, что более сложные сценарии появятся, когда я пойду туда, где это будет не так просто, как сообщение об успехе/ошибке. Спасибо, хотя, я уверен, что это учитывается! – CmdrSharp

+0

Хорошо, другим способом было бы использовать метод 'redirect()'. Вы можете сделать отдельные функции в вашем контроллере для 'register_success()' и 'register_fail()', сделать «redirect (Users/register_success)» и добавить эти два к маршрутам, как вы объясняли до – acupajoe

+1

Спасибо! Я не уверен, почему я об этом не думал. Однако я решил не использовать перенаправление, но вместо этого просто иметь функцию register этого класса обрабатывать несколько сценариев. Спасибо, что вернули меня в нужное русло! – CmdrSharp