【问题标题】:create main page with codeigniter使用 codeigniter 创建主页
【发布时间】:2010-08-04 12:49:02
【问题描述】:

如何使用 codeigniter 创建主页?

该页面应包含一些链接,例如登录、注册等。

我按照 tut 创建了一个登录屏幕。但它只是为了这个目的而制作了codeigniter。这是我正在谈论的网站:

http://tutsmore.com/programming/php/10-minutes-with-codeigniter-creating-login-form/

所以基本上我想要做的是,将 codeigniter 用于更多的事情,而不仅仅是登录表单。

我尝试 routes.php 我设置了这些设置:

$route['default_controller'] = "mainpage";
$route['login'] = "login";

我的 mainpage.php 文件:

class Mainpage extends Controller
{
    function Welcome()
    {
        parent::Controller();
    }

    function index()
    {

        $this->load->view('mainpage.html');
    }
}

Mainpage.html:

<HTML>

<HEAD>
<TITLE></TITLE>
<style>
      a.1{text-decoration:none}
      a.2{text-decoration:underline}
</style>

</HEAD>

<BODY>

     <a class="2" href="login.php">login</a>

</BODY>
</HTML>

Login.php 看起来与我在这篇文章中提供链接的那个网站上的完全一样:

Class Login extends Controller
{
    function Login()
    {
        parent::Controller();
    }

    function Index()
    {
        $this->load->view('login_form');
    }

    function verify()
    {
        if($this->input->post('username'))
        { //checks whether the form has been submited
            $this->load->library('form_validation');//Loads the form_validation library class
            $rules = array(
                array('field'=>'username','label'=>'username','rules'=>'required'),
                array('field'=>'password','label'=>'password','rules'=>'required')
            );//validation rules

            $this->form_validation->set_rules($rules);//Setting the validation rules inside the validation function
            if($this->form_validation->run() == FALSE)
            { //Checks whether the form is properly sent
                $this->load->view('login_form'); //If validation fails load the <b style="color: black; background-color: rgb(153, 255, 153);">login</b> form again
            }
            else
            {
                $result = $this->common->login($this->input->post('username'),$this->input->post('password')); //If validation success then call the <b style="color: black; background-color: rgb(153, 255, 153);">login</b> function inside the common model and pass the arguments
                if($result)
                { //if <b style="color: black; background-color: rgb(153, 255, 153);">login</b> success
                    foreach($result as $row)
                    {
                        $this->session->set_userdata(array('logged_in'=>true,'id'=>$row->id,'username'=>$row->username)); //set the data into the session
                    }

                    $this->load->view('success'); //Load the success page
                }
            else
            { // If validation fails.
                    $data = array();
                    $data['error'] = 'Incorrect Username/Password'; //<b style="color: black; background-color: rgb(160, 255, 255);">create</b> the error string
                    $this->load->view('login_form', $data); //Load the <b style="color: black; background-color: rgb(153, 255, 153);">login</b> page and pass the error message
                }
            }
        }
        else
        {
            $this->load->view('login_form');
        }
    }
}

我想念什么?

【问题讨论】:

  • 那么login.php 找不到基本上是错误信息“找不到对象”,“错误404”。
  • 代替href="login.php",试试href="./login.php"

标签: php codeigniter


【解决方案1】:

您正在使用 CodeIgniter,对吗?您的配置中是否有一些规定,您必须使用 .php 作为所有 URL 的扩展名?如果没有,您应该将您的 href 发送到“/login”而不是“/login.php”。此外,如果您没有从您的 htaccess 文件和 CI 配置中的 URL 中删除“index.php”,您可能需要将其包含在您的链接中。

此外,如果我是你,我不会遵循 Sarfraz 在他的 Mainpage.php 文件中所做的事情。你不应该在 CodeIgniter 中使用标准的 PHP 包含。使用包含完成的任何事情都可以通过加载视图轻松完成。例如,如果你想将视图加载为字符串,你可以说:

$loginViewString = $this->load->view('login.php', '', true);

其中第二个参数是您希望在关联数组中传递给视图的任何信息,其中键是您将要传递的变量的名称,值是值。那就是……

$dataToPassToView = array('test'=>'value');
$loginViewString = $this->load->view('login.php', $dataToPassToView, true);

然后在您的 login.php 视图中,您可以只引用变量 $test,它的值为“value”。

此外,您实际上不需要声明“登录”路由,因为您只是将其重定向到“登录”控制器。您可以做的是拥有一个带有“登录”方法的“用户”控制器,并像这样声明您的路线:

$routes['login'] = 'user/login';

编辑...

好的,我认为这可能在错误的方向上偏离了一两步。让我们重新开始,好吗?

首先让我们从与本次讨论相关的文件列表开始:

  1. application/controllers/main.php (这将是你的“默认”控制器)
  2. application/controllers/user.php (这将是处理用户相关请求的控制器)
  3. application/views/header.php (我通常喜欢将页眉和页脚保持为单独的视图,但这不是必需的......您可以简单地将内容作为字符串回显到“主页”视图中正如你正在做的那样......虽然我应该提到在你的例子中你似乎忘记将它回显到正文中)
  4. application/views/footer.php
  5. application/views/splashpage.php (这是包含登录页面链接的页面内容)
  6. application/views/login.php (这是登录页面的内容)
  7. application/config/routes.php (这将用于将 /login 重新路由到 /user/login)

那么,现在让我们看看每个文件中的代码,它们将实现您想要做的事情。首先是 main.php 控制器(同样,它将是您的默认控制器)。这将在您访问网站的根地址时调用... www.example.com

application/controllers/main.php

class Main extends Controller
{
    function __construct() //this could also be called function Main(). the way I do it here is a PHP5 constructor
    {
        parent::Controller();
    }

    function index()
    {
        $this->load->view('header.php');
        $this->load->view('splashpage.php');
        $this->load->view('footer.php');
    }
}

现在让我们看一下页眉、页脚和启动页面视图:

application/views/header.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<meta name="description" content="This is the text people will read about my website when they see it listed in search engine results" /> 
<title>Yustme's Site</title> 

<!-- put your CSS includes here -->

</head> 

<body>

application/views/splashpage.php - 注意:这里没有理由需要一个包装器 div...它只是作为示例放在那里

<div id="splashpagewrapper">
    <a href="/login">Click here to log in</a>
</div>

application/views/footer.php

</body>
<!-- put your javascript includes here -->
</html>

现在让我们看看 User 控制器和 login.php 视图:

应用程序/控制器/user.php

class User extends Controller
{
    function __construct() //this could also be called function User(). the way I do it here is a PHP5 constructor
    {
        parent::Controller();
    }

    function login()
    {
        $this->load->view('header.php');
        $this->load->view('login.php');
        $this->load->view('footer.php');
    }
}

application/views/login.php

<div id="login_box">
<!-- Put your login form here -->
</div>

最后是让 /login 寻找 /user/login 的路径:

application/config/routes.php

//add this line to the end of your routes list
$routes['login'] = '/user/login';

就是这样。没有魔法什么的。我提出可以将视图作为字符串加载的原因是因为您可能不希望有单独的“页眉”和“页脚”视图。在这种情况下,您可以简单地将视图作为字符串“回显”到另一个视图中。另一个示例是,如果您有一个装满商品的购物车,并且您希望购物车和商品是单独的视图。您可以遍历您的商品,将“shoppingcartitem”视图加载为每个商品的字符串,将它们连接在一起,然后将该字符串回显到“shoppingcart”视图中。

应该是这样的。如果您仍有疑问,请告诉我。

【讨论】:

  • 我从 CI 中删除了 index.php 文件,我遵循了本教程:anmsaiful.net/blog/php/remove-codeigniter-index-php.html 并且因为我将 mainpage.html 更改为 .php,我现在得到了 2 个 mainpage.php。我将 .html 更改为 index.php。正文如下所示: load->view('login.php', '', true); ?> login 现在我无法访问 default_controller 的 mainpage.php。找不到 404 页面。
  • 为清楚起见,login.php 位于控制器文件夹中。它从视图文件夹加载视图 login_form.php。反正有从控制器调用另一个控制器吗?主页是一个控制器,login.php也是如此
  • 嘿Yustme。我无法再完全准确地告诉您您要做什么,因为我认为存在误解。我将编辑我的帖子,尝试向您展示我如何将“登陆”页面和“登录”页面组合在一起。
  • 这篇文章已经有 5 年的历史了。现在你应该已经切换到不是 CodeIgniter 的东西了。
  • 我按照您上面所说的程序进行操作,但是当我转到 www.mywebsite.com 时,会出现 404 页面...当我转到 www.mywebsite.com/login 或使用任何适当的链接时/login 它正在工作...但是 www.mywebsite.com 显示 404 错误。你能帮帮我吗?
【解决方案2】:

请注意,您没有为主控制器指定正确的方法名称:

class Mainpage extends Controller
{
    function Welcome() // < problem should be Mainpage
    {
        parent::Controller();
    }

    function index()
    {

        $this->load->view('mainpage.html');
    }
}

建议:

不创建html页面,而是创建一个php页面并使用include命令包含login.php文件。

Mainpage.php:

<HTML>

<HEAD>
<TITLE></TITLE>
<style>
      a.1{text-decoration:none}
      a.2{text-decoration:underline}
</style>

</HEAD>

<BODY>

     <?php include './login.php'; ?>

</BODY>
</HTML>

并使用此文件名修改您的主控制器,例如:

class Mainpage extends Controller
{
    function Mainpage()
    {
        parent::Controller();
    }

    function index()
    {

        $this->load->view('mainpage.php');
    }
}

【讨论】:

  • 还是没有运气。我收到此错误:遇到 PHP 错误严重性:警告消息:include(./login.php) [function.include]:无法打开流:没有这样的文件或目录文件名:views/mainpage.php 行号: 14 我检查了一切。
  • 使用像这样的绝对路径dir/dir2/login.php 确保您指定了正确的路径。如果你能知道 hte login.php 文件的路径,也请告诉我。
  • 绝对路径也不起作用: 。我不明白你最后的评论“也……”。
  • 好的试试:include ("../controllers/login.php");
  • 也没有用。尝试了 1 个点,也没有 '../'。都失败了。
【解决方案3】:

我认为您应该首先在您的主文件夹中添加一个名为 .htaccess 的文件 例如

<IfModule mod_rewrite.c>
  RewriteEngine On
  # !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading
  #  slashes.
  # If your page resides at
  #  http://www.example.com/mypage/test1
  # then use
  # RewriteBase /mypage/test1/
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ /test/index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
  # If we don't have mod_rewrite installed, all 404's
  # can be sent to index.php, and everything works as normal.
  # Submitted by: ElliotHaughin

  ErrorDocument 404 /index.php
</IfModule>

在测试字段中,您需要添加您的主文件夹或 baseurl

你需要将配置页面中的baseurl设置为

$config['base_url'] = 'http://localhost/test';

html页面内的链接应该是 &lt;a class="2" href="http://localhost/test/Login"&gt;login&lt;/a&gt;

在 login_form 页面中,您需要将操作 url 设置为

http://localhost/test/Login/verify

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2014-01-29
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多