使用Codeigniter中的路由到达两个控制器之一

时间:2018-11-10 15:00:50

标签: php codeigniter-3

我有两个控制器Configure.php和Users.php。在我的route.cfg中,我有:

   <iframe src="shiny-proxy/" class="shinyFrame">
          <object data="shiny-proxy/" type="text/html; charset=utf-8" class="shinyFrame">
          <embed src="shiny-proxy/" type="text/html; charset=utf-8" class="shinyFrame" />
         </object>
    </iframe>

当用户打开网站时,完美的浏览器栏https://www.stantiation.com/sub_crud/Users/login/中会出现以下页面。

问题是,如果用户忘记了密码,我将他们路由到可以创建新密码的方法时遇到麻烦。我让用户向自己发送电子邮件,我在其中放置了“代码”,使他们可以更新密码。该电子邮件具有此表单的链接: https://www.stantiation.com/sub_crud/Users/resetPassword?fp_code=492c8bbd3841xxx8201f3a01d77fd

我还有一个名为view / Users / resetPassword.php的视图文件,该文件允许用户输入新密码。弹出来很好。这是表单的发布方法。        当用户按下“提交”时,由于没有save_userinput.php文件,因此工具栏中出现https://www.stantiation.com/sub_crud/Users/save_userinput并显示404错误。我试图在Users.php控制器中运行save_userinput()方法,而不是在view / Users /目录中运行save_userinput.php。我同意404,因为该文件不存在。 如何在控制器Users中以所需的形式指定方法,而不是view / Users / save_userinput.php文件?这就是为什么我放入最后一个$ route的原因,但这似乎无济于事。

1 个答案:

答案 0 :(得分:0)

似乎您可能已经了解了CodeIgniter URL方案。阅读HERE

基本上,它可以归结为http:doman.tld/controller/function[/var1 ...[/varN]] 因此,在域之后,您可以按以下方式解释多个细分:

  1. 第一段代表应该调用的控制器。
  2. 第二段代表应该调用的类函数或方法。
  3. 第三个以及任何其他段代表将传递给控制器​​的所有变量。

因此URL https://www.stantiation.com/sub_crud/Users/save_userinput将转到控制器Users(似乎位于/application/controllers/sub_crud的文件夹中)并调用控制器方法save_userinput。它不在寻找名为save_userinput.php的文件。

404可能是因为控制器不在子文件夹中,或者因为找不到控制器尝试加载的其他文件(即“查看”文件)。

如果不查看表单的html并确切知道文件布局的结构,就很难提供更好的建议。

旁注:我避免将控制器放在子文件夹中,因为它与URL“ look”和IMO混淆,就“ controllers”而言,跟踪“什么是什么”并不难。 / em>)

当您要覆盖CodeIgniter基于URL的基于段的方法时,实际上只需要路由。考虑到这一点,基于对应用程序的普遍缺乏了解,以下“路由”似乎没有道理。

$route['registration'] = 'registration';
$route['login'] = 'login';
$route['subit_backend']['GET']='subit_backend/register';
$route['save_userinput']='Users/save_userinput';