Php 在codeigniter 2.1中的控制器类中处理段
我被困在codeigniter的片段中,因为它对我来说是新的,Php 在codeigniter 2.1中的控制器类中处理段,php,codeigniter-2,Php,Codeigniter 2,我被困在codeigniter的片段中,因为它对我来说是新的, 我的登录表单出现问题 我给出了url,比如action=“blog/login/getLog”和 我的登录表单显示在url中,如blog/login 我知道,在控制器类中,我只创建了一个名为login的函数,但我创建的控制器文件如下: class Blog extends CI_Controller{ function __construct(){ parent::__construct(); } // Now See f
我的登录表单出现问题 我给出了url,比如
action=“blog/login/getLog”
和我的登录表单显示在url中,如
blog/login
我知道,在控制器类中,我只创建了一个名为login
的函数,但我创建的控制器文件如下:
class Blog extends CI_Controller{
function __construct(){
parent::__construct();
}
// Now See
function _remap( $method ){
$this->load->view('header');
switch( $method ){
case 'about':
$this->load->view('about');
break;
case 'login':
$this->load->view('login');
break;
case 'services':
$this->load->view('service');
break;
}
$this->load->view('footer');
}
}//Close Class
但是现在我不知道如何处理这两个部分,比如login
和login/getLog
编辑:具体发生了什么,当我点击登录按钮时,我只看到登录表单符合\u remap()
和类似blog/login
的url,当我提交表单和类似blog/login/getLog
的url时,登录表单仍在查看,但成功后我想重定向它。。或者,如果可能,在案例“login”中检测段getLog
:
如果可能
高级感谢。如果您通过URL发送,只需使用uri类:
$var = $this->uri->segment(3);
如果以表单形式发送,请通过表单发送变量。也许是一个隐藏的领域
$var = $this->input->post('var_name');
编辑:我不太清楚为什么要使用_remap进行此w/o路由到另一个函数(您只是尝试调用视图文件)
这就是我希望看到的登录表单:
<?php echo form_open('blog/login');?>
<input type="hidden" name="getLog" value"true" />
<input type="submit" value="Login" />
</form>
编辑2:
以防出现混淆,并且您实际上希望使用重新映射。您也可以这样做来获取变量
function _remap( $method ) {
if ($method == ‘something’) {
$this->something();
}
else {
$this->somethingelse();
}
}
function something() {
$var1 = $this->uri->segment(3);
$var2 = $this->input->post('some_variable_name');
}
如果您尚未通过htaccess从url中删除index.php,请添加index.php
编辑: 根据你的问题, 但现在我不知道如何处理login和login/getLog这两个段 你就是这样处理的 方法名称之后的任何额外段都作为可选的第二个参数传递到_remap()
public function _remap($method, $params = array())
{
// all other segments will be in $paramas array
}
到底出了什么问题?您是否收到登录案例?您的意思是在同一登录页面上说登录表单操作??如果我使用
$this->login()
而不是$this->load->view('login')
中的案例'login':
?我可以使用上述方法??您需要使用\u remap
中的方法。表示$this->login()
或任何其他函数。这不会解决问题,因为他在路由时没有在_remap中放置任何方法。这就是为什么我说我不确定他为什么尝试使用remap。他可以改为使用函数登录,但添加了编辑以显示如何使用重新映射。@MikeCruz13请不要介意,但这是我在codeigniter中的第一个站点,我说我是codeigniter的新手,我使用了\u remap()
因为每次都要从页眉和页脚视图中删除:)如果你真的不想重写$this->load->调用两次,你可以创建一个函数index()并调用它。比如博客/索引/登录。您可以将其命名为其他名称,但index有一个好处,即当控制器后面没有其他内容时,它会自动被调用。i、 e.www.example.com/blog在index中,使用uri->segment类调用,如我上面所示。@MikeCruz13由于很多繁忙的计划尚未实施,本周日我将尝试,我知道stackoverflow的规则。我会回来告诉你所有的事情,不管它是否有效,这就是为什么我没有标记它已解决。。
class Blog extends CI_Controller{
function __construct(){
parent::__construct();
}
// Now See
function _remap( $method ){
switch( $method ){
case 'about':
$this->about(); <---------- here method (Add header, content, footer inside respective functions)
break;
case 'login':
$this->login(); <------- here too
break;
case 'services':
$this->service(); <----- here too
break;
}
}
}//Close Class
action = "<?php echo base_url('blog/login');?>"
public function _remap($method, $params = array())
{
// all other segments will be in $paramas array
}