Codeigniter 如何将数据发送到代码点火器控制器索引方法?

Codeigniter 如何将数据发送到代码点火器控制器索引方法?,codeigniter,codeigniter-url,Codeigniter,Codeigniter Url,我尝试在我的CodeIgniter应用程序的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 f

我尝试在我的CodeIgniter应用程序的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);
    }
}
?>
This event has ID <?= $journalId ?>.
这是我的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>

选项+FollowSymLinks
重新启动发动机
重写基/
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则^(.*)$index.php?$1[QSA,L]
然而,当我访问mysite.com/journal/3时,我得到一个404错误。为什么?

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

(:num) will become invalid if you encode
编辑: 如果使用CI的加密类对ID进行编码(无意义) 您需要修改它以确保字符串是uri安全的

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

根据我上面看到的,这只是CI路由上的一个错误

htaccess还可以(您只是从url中删除index.php)

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

首先,在控制器中,创建新控制器时,应扩展CI_控制器 简而言之,您的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);
    }
}
这将把来自journal/[ID]的所有通信重定向到名为journal的控制器,再重定向到名为index且参数为[ID]的方法

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

试试这个,一切都会好起来的。
干杯。

根据我上面看到的,这只是CI路由上的一个错误

htaccess还可以(您只是从url中删除index.php)

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

首先,在控制器中,创建新控制器时,应扩展CI_控制器 简而言之,您的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);
    }
}
这将把来自journal/[ID]的所有通信重定向到名为journal的控制器,再重定向到名为index且参数为[ID]的方法

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

试试这个,一切都会好起来的。
干杯。

首先:您不需要创建空构造函数(这是必须的[nothing!])。 如果要在该控制器的所有函数的开头加载一些库、帮助程序或模型,则需要加载,否则不需要加载

其他提示:尽量不要在控制器函数上传递参数。您可以使用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);
    }
}

首先:不需要创建空构造函数(这是必须的[nothing!])。
如果要在该控制器的所有函数的开头加载一些库、帮助程序或模型,则需要加载,否则不需要加载

其他提示:尽量不要在控制器函数上传递参数。您可以使用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);
    }
}

是否设置了.htaccess文件?如果没有,您需要通过其索引页访问该站点:
mysite.com/index.php/journal/3
I确实有一个.htaccess文件。URL中没有编码数据的控制器(其方法不接受参数)正在工作。而且,无论是
mysite.com/journal/3
还是
mysite.com/index.php/journal/3
都不起作用。有趣的是,访问mysite.com/journal/
是可行的。但是,显示的文本是
此事件有ID。
没有实际的事件ID。您是否在routes.php中定义了规则?按照@safarov的思路,发布相关的
。htaccess
config/routes.php
可能有助于我们更好地猜测。您为什么要对ID进行编码?您所做的只是将php的另一个步骤添加到进程中。是否设置了.htaccess文件?如果没有,您需要通过其索引页访问该站点:
mysite.com/index.php/journal/3
I确实有一个.htaccess文件。URL中没有编码数据的控制器(其方法不接受参数)正在工作。而且,无论是
mysite.com/journal/3
还是
mysite.com/index.php/journal/3
都不起作用。有趣的是,访问mysite.com/journal/
是可行的。但是,显示的文本是
此事件有ID。
没有实际的事件ID。您是否在routes.php中定义了规则?按照@safarov的思路,发布相关的
。htaccess
config/routes.php
可能有助于我们更好地猜测。您为什么要对ID进行编码?您所做的只是为php添加另一个步骤来处理谢谢,我忘记了字符串
'journal/index/$1'
中的“index”。谢谢,我忘记了字符串
'journal/index/$1'
中的“index”。