如何从codeigniter中的url获取参数?

时间:2015-04-18 14:16:51

标签: codeigniter

我无法从codeigniter中的url获取参数值。 例如:localhost/log/job/php此处log/是我的文件夹,job/是我的控制器,php是我的参数。

我想在控制器'job'中获取此参数。 我怎么能这样做?

5 个答案:

答案 0 :(得分:5)

您可以使用$this->uri->segment(n)

http://www.codeigniter.com/userguide2/libraries/uri.html

答案 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) 
    {
       ........
    }
 }

参考此http://www.codeigniter.com/userguide2/libraries/uri.html

答案 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文件:

  1. 创建一个.htaccess文件,其中index.php文件位于内容

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L,QSA]
    
  2. 确保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>
    
  3. 如果您没有,请使用以下命令启用mod重写:

        `sudo a2enmod rewrite`
    
  4. 最后不要忘记重启apache。

  5. 希望这会有所帮助。

答案 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]