2013-06-12 2 views
0

Я занимаюсь разработкой сайта с Codeigniter 2.1.3Codeigniter HMVC и ion_auth с ajaxForm

Я использую HMVC для создания ion_auth модулей.

Я пытаюсь отделить мою систему входа в систему и бэкэнд.

Я создал два модуля для ion_auth: приложения/модули/Авт - для внешнего интерфейса приложений/модулей/администратора - для внутреннего интерфейса

Оба имеют одни и те же файлы, за исключением контроллера администратора Идента звонит другие вид входа в систему.

Мое мнение Главная вызывает вид входа в систему, как это:

echo Module::run('auth/login'); 

Оба контроллера аутентификации продлить Frontend_controller, который проходит MY_Controller. MY_Controller находится в приложении/ядре, и он расширяет MX_Controller.

мнение Войти на веб-интерфейсе с помощью ajaxForm для отправки формы:

<div id="login_form"> 
<?php 
$attr = array('class'=>'form-inline', 'id'=>'loginForm'); 
$send = array('class'=>'btn btn-inverse', 'name'=>'signin', 'value'=>'Sign In'); 
echo form_open(site_url('auth/login', $attr)); 
?> 
<div > 
<img src="<?php echo site_url('assets/img/login.gif'); ?>" alt="Login" /> 
</div> 
<div left; font-size:11px; font-weight:bold;padding-top:25px;margin-right:45px">LOGIN</div> 

<div left"> 
<?php echo form_label('Cellphone', 'cellphone', array('class'=>'login-label')); ?> 
</div> 
<div class="span2" padding-top:10px"><?php echo form_input('identity', set_value('identity', ''), 'placeholder="cellphone no" class="span2 phone" id="cellphone"'); ?></div> 

<div left; margin-left:10px"><?php echo form_label('Password', 'password', array('class'=>'login-label')); ?></div> 
<div class="span2" padding-top:10px"><?php echo form_password('password', '', 'placeholder="password" class="span2" id="password"'); ?></div> 
<div class="span1" ><?php echo form_submit($send); ?></div> 
<input type="hidden" name="submitLogin" value="1" /> 
<?php echo form_close(); ?> 
<div class="clearfix"></div> 
</div> 
<script> 
$(function() 
{ 
var options = { 
target: '#login_form', 
success:  showResponse // post-submit callback 
}; 

$('#loginForm').ajaxForm(options); 

// post-submit callback 
function showResponse(responseText, statusText, xhr, $form) { 
    alert('status: ' + statusText + '\n\nresponseText: \n' + responseText + 
     '\n\nThe output div should have already been updated with the responseText.'); 
} 
}); 
</script> 

У меня есть несколько проблем:

Проблема одна: я читал через документацию HMVC и добавил эти строки в MY_Controller файл:

$this->load->library('form_validation'); 
$this->form_validation->CI =& $this; 

Я создал файл MY_Form_validation в: приложения/библиотеки:

class My_Form_validation extends CI_Form_validation() 
{ 
public $CI; 
} 

После этого, когда я иду на мою страницу, я получаю эту ошибку: не может получить доступ к защищенным ресурсам CI_Form_validation :: $ CI в C: \ сайтов \ ТЛ \ приложения \ ядро ​​\ MY_Controller.php на линии 12

Проблема 2. Если я не делаю эти изменения проверки формы и не пытаюсь отправить форму регистрации на главной странице, она снова открывает окно входа в систему на новой странице без ошибок. Похоже, что он не использует jquery для отправки формы

Пожалуйста, помогите с этим?

Я боюсь в течение нескольких дней, чтобы эта система входа в систему работала.

+0

Похоже, проблема заключается в том, что форма входа не отправляется через вызов jQuery ajaxForm, но я не знаю почему. –

ответ

0

Когда я впервые открыл расширение HMVC, я начал с использования Modules :: run(), а затем столкнулся с проблемами, сходными с вашими, поэтому мне пришлось найти альтернативный способ делать что-то при использовании как собственных функций CI и HMVC. Мой вывод состоял в том, чтобы создать Frontend_Controller и Backend_controller, которые оба наследуют от Base_controller. Последний имеет слой рендеринга шаблонов и другие общие функции.

Способ, которым я организовал свои модули, - это играть с файлами маршрутов.

Вы можете добавить проверку подлинности (сеанс) на Base_controller, которая будет перенаправлена ​​на модуль auth, и там вы создадите систему аутентификации на основе сеанса, перенаправление на основной модуль.

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

Edit:

Я проверил ваши вопросы и прочитать код, указанный Вами заметили 2 проблемы.

1 Если вы пройдете исходный код класса Form_Validation в /system/libraries/Form_Validation.php, вы заметите, что поле $ CI защищено и, следовательно, не может быть установлено таким образом, вы можете сделать это:

class My_Form_validation extends CI_Form_validation() 
{ 
    function __construct() 
    { 
      parent::__construct(); // in the parent constructor : $this->CI =& get_instance(); 
    } 
} 

2- вы вызываете ajaxFrom() по идентификатору формы, я думаю, что вы должны переопределить нормальное поведение представить, который обычно посылает стандартный запрос HTTP с помощью вызова Ajax отправки данных формы и извлечения ответ.

+0

Спасибо, AchrafSoltani, но я не понимаю, как использовать свой путь и как он решает мою проблему. У меня есть 2 контроллера Frontend и Admin. У меня также есть базовый конвейер: MY_Controller. Я не вижу, как он решает проблему, что в режиме входа в систему не используется jQuery ajaxForm для отправки формы? –

+0

Я нашел его !!! Это была ошибка в декларации формы: \t эхо Form_Open (site_url ('авториз/Войти', $ атр); Должно быть: эхо Form_Open (site_url ('авториз/Войти'), $ атр); –

+0

Я обновил ответ, возможно, это может помочь вам. – AchrafSoltani

Смежные вопросы