在视图中我有两个文件夹页面,模板。在内页我有两个文件夹非成员和成员。 在模板里面我有header.php和footer.php。 在nonmember文件夹中,我有一个通知文件,email_notification.php,以及其他文件 home.php,about.php等。
使用以下函数动态生成页面
public function index(){
$this->nonmember();
}
public function nonmember($page = 'home'){
if (! file_exists(APPPATH.'views/pages/nonmember/'.$page.'.php')) {
show_404();
}
$data['title'] = ucfirst($page);
$this->load->view('templates/header', $data);
$this->load->view('pages/nonmember/'.$page, $data);
$this->load->view('templates/footer', $data);
}
并将其调用以显示登录页面或注册页面
public function registration(){
//validation rules
if($this->form_validation->run()){
//add user to a temporary table
//send an email with an activation code
$this->nonmember('email_notification');
//that view says click the link in email for activating account
}else{
$this->nonmember('registration');
}
}
问题是email_notification视图也可以通过url访问,这是不可取的。 如何阻止email_notification直接访问?就像用户尝试使用url访问它一样 我想将它们重定向回主页,或者show_error()?
答案 0 :(得分:0)
阻止导航到视图文件,即http://[application_root]/application/views/pages/nonmember/email_notification.php
您可以在CodeIgniter文件的开头使用以下代码段:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
相反,如果您试图阻止对显示此页面的控制器操作进行Web访问,则可以使用CLI实用程序:Codeigniter 2 restrict controller to command line
答案 1 :(得分:0)
只需将其作为私人&#34;方法。您可以使用关键字private(类似于在方法之前将单词设置为public) - 而codeigniter允许您在方法名称之前仅使用下划线创建私有方法
function index(){
$this->_nonmember();
}
function _nonmember($page = 'home'){
… etc etc
许多优点 - 私有方法名称未公开,您可以在以后需要时更改方法名称
function index(){
$this->_someNewNonMemberMethod();
}
但对于用户来说却完全一样。
========编辑
以及许多不同的解决方案以及您希望如何设计应用程序。像一个考虑因素是为成员和非成员分别设置控制器。但是对于您发布的代码,您已经有了一个单独的注册方法,所以最快的方法是为电子邮件视图创建一个快速私有方法,如果您不希望这样做。
public function registration(){
//validation rules
if($this->form_validation->run()){
//add user to a temporary table
//send an email with an activation code
// make this method private
$this->_nonmemberEmailNotify() ;
答案 2 :(得分:0)
正如James Lalor已经提到过使用会话这是一个很好的解决方案。
我所做的就是$this->nonmember('email_notification');
我正在使用
$this->session->set_userdata('email_notification' => 1);
在非成员函数中,我只是检查该会话是否设置为1。
if ($page == 'email_notification' && $this->session->userdata('email_notification') != 1) {
redirect($this->agent->referrer());
}
稍后当用户激活他们的帐户时,我会破坏会话