2015-04-18 7 views
5

Non è stato possibile ottenere il valore del parametro dall'url nel codeigniter. Ad esempio: localhost/log/job/php qui log/ è la mia cartella, job/ è il mio controller e php è il mio parametro.Come ottenere il parametro dall'url nel codeigniter?

Voglio ottenere questo parametro nel "job" del controller. Come posso farlo?

+0

Potrebbe essere necessario configurare i percorsi. – user4419336

risposta

4

È possibile utilizzare $this->uri->segment(n);

Hai bisogno di fare alcuni cambiamenti nel percorso al fine di permettere il codeigniter per ricevere il parametro nel vostro controller

$route['uri-(:any)/(:num)'] = "controller/function/$1/$2"; 

O

$route['uri-(:any)'] = "controller/function/$1"; 

nel controller esegue alcune modifiche

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

class controller extends CI_Controller 
{ 
    function function($parameter1 = null, $parameter2 = null) 
    { 
     ........ 
    } 
} 

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

2

Assumendo che il parametro sarà, alla fine, sempre:

$segs = $this->uri->segment_array(); 
echo end($segs); 

EDIT: Per l'chiarire altri elementi essenziali. In primo luogo è necessario il configurare il application/config/routes.php:

$route['Youruri-(:any)/(:num)'] = "yourcontroller/yourfunction/$1/$2"; 
$route['Youruri-(:any)'] = "yourcontroller/yourfunction/$1"; 

Nel controllore application/controllers/yourcontroller.php è necessario definire una funzione:

<?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) 
    } 
} 
} 
+0

ho provato solo visualizzando il nome del controller ma non visualizzando il mio parametro –

+0

@ M.Athishkrishna il codice con segmenti mostra sempre l'ultima parte dell'URL. Penso che non passi i parametri tramite uri alla tua applicazione. – motto

2

si ottiene da questo:

$this->uri->segment(n); 

dove n = 1 per controller, n = 2 per metodo e n = 3 per parametro e così via.

È necessario n = 3 per ottenere il parametro.

Nel percorso localhost/log/job/php, manca il nome del metodo.

Anche se il nome del metodo è index allora percorso sarà localhost/log/job/index/php

Nel caso in cui è necessario rimuovere index.php da URL quindi si otterrà parametro utilizzando localhost/log/index.php/job/index/php

Per rimuovere index.php voi necessario creare file .htaccess seguendo questi passaggi:

  1. creare un file .htaccess in cui il file index.php si trova con i contenuti

    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
    
  2. Assicurarsi che apache possa accedere a questo file .htaccess. Per fare questo modifica il file di configurazione di Apache. Se si utilizza ubuntu, allora è /etc/apache2/sites-available/default e quindi modificare AllowOverride none in AllowOverride all per directory e directory www.

    <Directory /> 
         Options FollowSymLinks 
         AllowOverride all 
        </Directory> 
        <Directory /var/www/> 
         Options Indexes FollowSymLinks MultiViews 
         AllowOverride all 
         Order allow,deny 
         allow from all 
        </Directory> 
    
  3. Poi abilitare mod rewrite se non lo avete, con il seguente comando:

    `sudo a2enmod rewrite` 
    
  4. Infine non dimenticate di riavviare apache.

Spero che questo possa essere d'aiuto.

0

Usa:

$param = $this->uri->segment(3); 

aggiungere .htaccess sulla cartella (sul caso è "log"):

RewriteEngine On 
RewriteBase /log/ 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /log/index.php/$1 [L]