Codeigniter - 从同一控制器在索引函数上加载控制器函数
Codeigniter - loading a controller function on index function from same controller
我想知道我是否可以在 'admin' 控制器中访问我的 'new_admin' 功能,而无需将 new_admin begin 添加到 link。
我的控制器:
<?php
class Admin extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->model('Admin_model', '', TRUE);
$this->load->view('admin/admin_nav');
}
public function index()
{
if($this->session->userdata('logged_in'))
{
$this->load->view('admin/admin_dashboard');
}
else
{
redirect('login');
}
}
public function new_admin()
{
$data = [];
if($this->input->server('REQUEST_METHOD') == 'POST')
{
$email = $this->input->post('email');
$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
if($this->form_validation->run())
{
$result = $this->Admin_model->check_if_admin($email);
if(!$result)
{
$new_admin = new Admin_model();
$new_admin->email = $email;
$new_admin->password = password_hash('admin', PASSWORD_DEFAULT, ['cost' => 12]);
$this->Admin_model->add_new_admin($new_admin);
$data['success'] = 'success';
}
else
{
$data["error_email"] = 'error';
}
}
}
$this->load->view("admin/admin_dashboard", $data);
}
}
我的看法:
<div>
<div>
<h1>Dashboard</h1>
</div>
<div>
<div>Add a new admin</div>
<div>
<form action="<?php echo site_url('admin/new_admin') ?>" method="post">
<label for="email">Email new admin</label>
<input type="text" name="email" id="email" value="<?php echo set_value('email'); ?>">
<?php echo form_error('email', '<div>', '</div>'); ?>
<?php if (isset($succes)): ?>
<p><?php echo $succes; ?></p>
<?php endif ?>
<?php if (isset($error_email)): ?>
<p><?php echo $error_email; ?></p>
<?php endif ?>
<button type="submit">Add new admin</button>
</form>
</div>
</div>
</div>
此代码段有效,但我希望它在 url 不更改的情况下也能正常工作。
这可能吗?
现在 url 我首先得到的是:'example.com/admin'
提交表单后变为'example.com/admin/new_admin'。
提前致谢。
您可以将表单操作 url 更改为索引函数并检测它是否来自提交 action.Here 是个好主意
像这样更改表单操作URL(内部视图文件)
<form action="<?php echo site_url('admin') ?>" method="post">
现在像这样更改您的控制器索引函数
public function index()
{
if($this->input->post())
{
$this->new_admin();
}
else
{
if($this->session->userdata('logged_in'))
{
$this->load->view('admin/admin_dashboard');
}
else
{
redirect('login');
}
}
}
我想知道我是否可以在 'admin' 控制器中访问我的 'new_admin' 功能,而无需将 new_admin begin 添加到 link。
我的控制器:
<?php
class Admin extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->model('Admin_model', '', TRUE);
$this->load->view('admin/admin_nav');
}
public function index()
{
if($this->session->userdata('logged_in'))
{
$this->load->view('admin/admin_dashboard');
}
else
{
redirect('login');
}
}
public function new_admin()
{
$data = [];
if($this->input->server('REQUEST_METHOD') == 'POST')
{
$email = $this->input->post('email');
$this->form_validation->set_rules('email', 'E-mail', 'required|valid_email');
if($this->form_validation->run())
{
$result = $this->Admin_model->check_if_admin($email);
if(!$result)
{
$new_admin = new Admin_model();
$new_admin->email = $email;
$new_admin->password = password_hash('admin', PASSWORD_DEFAULT, ['cost' => 12]);
$this->Admin_model->add_new_admin($new_admin);
$data['success'] = 'success';
}
else
{
$data["error_email"] = 'error';
}
}
}
$this->load->view("admin/admin_dashboard", $data);
}
}
我的看法:
<div>
<div>
<h1>Dashboard</h1>
</div>
<div>
<div>Add a new admin</div>
<div>
<form action="<?php echo site_url('admin/new_admin') ?>" method="post">
<label for="email">Email new admin</label>
<input type="text" name="email" id="email" value="<?php echo set_value('email'); ?>">
<?php echo form_error('email', '<div>', '</div>'); ?>
<?php if (isset($succes)): ?>
<p><?php echo $succes; ?></p>
<?php endif ?>
<?php if (isset($error_email)): ?>
<p><?php echo $error_email; ?></p>
<?php endif ?>
<button type="submit">Add new admin</button>
</form>
</div>
</div>
</div>
此代码段有效,但我希望它在 url 不更改的情况下也能正常工作。 这可能吗?
现在 url 我首先得到的是:'example.com/admin'
提交表单后变为'example.com/admin/new_admin'。
提前致谢。
您可以将表单操作 url 更改为索引函数并检测它是否来自提交 action.Here 是个好主意
像这样更改表单操作URL(内部视图文件)
<form action="<?php echo site_url('admin') ?>" method="post">
现在像这样更改您的控制器索引函数
public function index()
{
if($this->input->post())
{
$this->new_admin();
}
else
{
if($this->session->userdata('logged_in'))
{
$this->load->view('admin/admin_dashboard');
}
else
{
redirect('login');
}
}
}