我无法从codeigniter中的url获取参数值。
例如:localhost/log/job/php
此处log/
是我的文件夹,job/
是我的控制器,php
是我的参数。
我想在控制器'job'中获取此参数。 我怎么能这样做?
答案 0 :(得分:5)
您可以使用$this->uri->segment(n)
。
答案 1 :(得分:4)
您可以使用$this->uri->segment(n);
您需要在路由中进行一些更改,以便让代码点火器在控制器中接收参数
$route['uri-(:any)/(:num)'] = "controller/function/$1/$2";
或强>
$route['uri-(:any)'] = "controller/function/$1";
控制器中的做一些更改
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class controller extends CI_Controller
{
function function($parameter1 = null, $parameter2 = null)
{
........
}
}
答案 2 :(得分:2)
假设您的参数总是在最后:
$segs = $this->uri->segment_array();
echo end($segs);
编辑:澄清其他要点。首先,您需要设置application/config/routes.php
:
$route['Youruri-(:any)/(:num)'] = "yourcontroller/yourfunction/$1/$2";
$route['Youruri-(:any)'] = "yourcontroller/yourfunction/$1";
在控制器application/controllers/yourcontroller.php
中,您需要定义一个函数:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Yourcontroller extends CI_Controller {
function yourfunction($brand = null, $page = null) {
// http://www.yoursite.com/Youruri-Microsoft
// or http://www.yoursite.com/yourcontroller/yourfunction/Microsoft
// do some stuff for get products of this $brand (Microsoft)
if($page != null) {
// http://www.yoursite.com/Youruri-Intel/2
// or http://www.yoursite.com/yourcontroller/yourfunction/Intel/2
// do some other stuff get products of this $brand (Intel) of $page (2)
}
}
}
答案 3 :(得分:2)
你明白了:
$this->uri->segment(n);
其中控制器n = 1,方法n = 2,参数n = 3等等。
您需要n = 3才能获得参数。
在您的路径localhost/log/job/php
中,您的方法名称丢失了。
即使您的方法名称为index
,您的路线也会为localhost/log/job/index/php
如果你需要从url中删除index.php,那么你将使用localhost/log/index.php/job/index/php
获取参数
要删除index.php,您需要按照以下步骤创建.htaccess文件:
创建一个.htaccess文件,其中index.php文件位于内容
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
确保apache可以访问此.htaccess文件。要执行此操作,请编辑apache配置文件。如果您使用的是ubuntu,则为/etc/apache2/sites-available/default
,然后将AllowOverride none
更改为AllowOverride all
以获取目录和www目录。
<Directory />
Options FollowSymLinks
AllowOverride all
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
如果您没有,请使用以下命令启用mod重写:
`sudo a2enmod rewrite`
最后不要忘记重启apache。
希望这会有所帮助。
答案 4 :(得分:0)
使用:
$param = $this->uri->segment(3);
在你的文件夹上添加.htaccess(在你的情况下是"log"
):
RewriteEngine On
RewriteBase /log/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /log/index.php/$1 [L]