如何将数据发送到Code Igniter Controller索引方法?

时间:2012-03-19 21:13:31

标签: codeigniter codeigniter-url

我尝试在我的Code Igniter应用程序的URL中编码日志的ID,并在我的控制器中检索它。我的最终目标是访问页面http://mysite.com/journal/3并访问包含ID 3日志详细信息的页面。

在我的journal.php控制器文件中,我有

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Journal extends Controller {
    public function index($journalId) {
        $data['journalId'] = $journalId;
        $this->view->load('journalPage', $data);
    }
}
?>

在我的journalPage.php视图文件中,我有

This event has ID <?= $journalId ?>.

我在routes.php文件中写了这条规则。

$route['journal/(:num)'] = 'journal/$1';

这是我的html公用文件夹中的.htaccess文件。

<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [QSA,L]
</IfModule>

然而,当我去mysite.com/journal/3时,我收到404错误。为什么呢?

3 个答案:

答案 0 :(得分:3)

$route['journal/(:num)'] = 'journal/index/$1';

(:num) will become invalid if you encode

编辑: 如果您使用CI的加密类来编码您的ID(无意义) 你需要修改它以确保字符串是安全的。

答案 1 :(得分:1)

根据我在上面看到的情况,这只是错误的CI路由。

你.htaccess没问题(你只是从url中删除index.php)。

在其他两个步骤中(您的控制器和路径配置中存在问题)。

首先在控制器中,在创建新控制器时,您应该扩展CI_Controller 为了简化故事,这就是你的journal.php文件的样子:

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Journal extends CI_Controller {
    public function __construct() {
        parent::__construct(); // This is MUST!
    }
    public function index($journalId) {
        $data['journalId'] = $journalId;
        $this->view->load('journalPage', $data);
    }
}

现在,当你更新了这个,我们来路由配置。

你写的配置行只能混淆CI,仅此而已。

CI路线的结构应该是这样的:

$route['journal/(:any)'] = 'journal/index/$1';

这会将所有来自日志/ [ID]的流量重定向到名为journal的控制器,并使用param [ID]重定向到名为index的方法。

您必须在路由中定义索引部分。

试试这个,一切都应该正常。 欢呼声。

答案 2 :(得分:1)

首先:你不需要创建一个空的构造函数(这是必须的[没有!])。 如果你想在该控制器的所有函数的开头加载一些库,助手或模型,那么它是必需的,否则就不需要。

其他提示:尝试不在控制器功能上传递参数。您可以使用CodeIgniter的URI类来捕获和操作uri值。

这样做:

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Journal extends CI_Controller
{
    public function index()
    {
        $data['journalId'] = $this->uri->segment(2);
        $this->view->load('journalPage', $data);
    }
}

您最好看一下URI类。这很方便! http://codeigniter.com/user_guide/libraries/uri.html

PS:也不需要在路线上修理任何东西。

拥抱