【问题标题】:Routing in codeigniter the right way以正确的方式在codeigniter中路由
【发布时间】:2019-12-27 00:17:34
【问题描述】:

我正在开发我的主页,右上角有一个登录按钮。当“登录”文本如下时,我想显示一个登录页面:

<li class="nav-item">
                <a class="nav-link header-text" href="<?php echo 
site_url('Login/login') ?>">Login</a>
</li>

所以控制器叫“Login”,视图叫“login”。

我在routes.php文件中的路由规则如下

$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';

我的基本网址是:http://localhost:8080/ 我的网址是:http://localhost:8080/index.php

我的 .htaccess 文件如下所示:

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

当前设置的方式不适用于路由,如果我单击登录并被重定向到此 url,我会收到 404 not found 消息: http://localhost:8080/index.php/Login/login.html 你能帮我解决这个问题吗?谢谢!

编辑: 这是登录控制器代码:

<?php
class Login extends CI_Controller {

    public function view($page_name = 'login')
    {
        if ( ! file_exists(APPPATH.'views/pages/'.$page_name.'.php'))
        {
                // Whoops, we don't have a page for that!
                show_404();
        }

        $data['title'] = ucfirst($page_name); // Capitalize the first letter

        $this->load->view('templates/header', $data);
        $this->load->view('pages/'.$page_name, $data);
        $this->load->view('templates/footer', $data);
    }

}

【问题讨论】:

  • 我仔细阅读了这个链接的codeigniter教程:codeigniter.com/user_guide/tutorial/static_pages.html我的实际配置和教程一样。所以我尝试加载此 URL:localhost:8080/app/index.php/login 登录页面实际上已加载但有一个问题:没有 css... 正在尝试解决此问题
  • 附言。已加载页眉和页脚文件,因为我没有收到任何加载错误...主页的 css 已加载。页眉和页脚始终相同,位于视图/模板中

标签: php .htaccess codeigniter routing


【解决方案1】:

尝试删除$route['(:any)'] = 'pages/view/$1'; 看看会发生什么。它正在抓取每个请求并将其重定向到“页面/视图”。

我担心你误解了 CodeIgniter (CI) 如何使用 URL。你说,

所以控制器叫“Login”,视图叫“login”。

这让我相信 URL 代表了

example.com/class/view

当他们真正代表这个时

example.com/class/function/id/

其中 'id' 是要传递给函数的一个或多个值。

也许您的评论有误,但如果不是,我建议您重新阅读文档的CodeIgniter URLs 部分。您可能还会发现 URI Routing 部分很有价值,因为它清楚地定义了您何时可能想要使用 /config/Routes.php

登录网址也很奇怪。我很想看看控制器代码是什么样子的。

【讨论】:

  • 嗨!是的,我表达得很糟糕……我解释一下。控制器名称是 Login.php,类名称是 Login。如果我删除 $route['(:any)'] = 'pages/view/$1';它只是找不到正确的路径,因为我在视图文件夹中嵌套了另一个名为“pages”的路径......也许,正如你所问的,如果我向你展示我的控制器代码会更容易,所以我现在将它添加到说明!
【解决方案2】:

好的,我做到了! 基本上我对按照教程创建的标准路由规则有一个错误的想法。为了解决这个问题,我必须: 1) 将我的 base_url 更改为:http://localhost:8080/app。我添加了 /app 2)在这种情况下,路由到视图的正确方法是:http://localhost:8080/app/index.php/name_of_the_class; 3)为每个页面加载 css,我必须在链接标签中使用 base_url 语法,如下所示: " type="text/css" media="all">

如果您有任何建议、最佳实践或我可以做得更好的事情,我在这里!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 2019-10-11
    • 2014-04-14
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多