2015-04-18 15 views
5

Nie można uzyskać wartości parametru z adresu url w sygnaturze. Na przykład: localhost/log/job/php tutaj log/ jest mój folder, job/ jest moim kontrolerem i php jest moim parametrem.Jak uzyskać parametr z adresu URL w codeigniter?

Chcę uzyskać ten parametr w "zadaniu" kontrolera. Jak mogę to zrobić?

+0

może zaistnieć potrzeba, aby skonfigurować swoje trasy. – user4419336

Odpowiedz

4

Można użyć $this->uri->segment(n);

trzeba zrobić pewne zmiany w trasie, w celu umożliwienia zapalnik kod otrzymywać parametr w kontrolerze

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

LUB

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

w kontrolerze niektóre zmiany

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

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

przekazać ten http://www.codeigniter.com/userguide2/libraries/uri.html

2

Zakładając, że parametr będzie w końcu zawsze:

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

EDIT: Dla wyjaśnienia inne niezbędne. Najpierw musisz ustawienia swojej application/config/routes.php:

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

W regulatorze application/controllers/yourcontroller.php trzeba zdefiniować funkcję:

<?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

próbowałem go po prostu wyświetlając nazwę kontrolera, ale nie wyświetlając mojego parametru –

+0

@ M.Athishkrishna kod z segmentami zawsze pokazuje ostatnią część adresu URL. Myślę, że nie przekazujesz parametru za pomocą URI do swojej aplikacji. – motto

2

je dostać przez to:

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

gdzie n = 1 dla kontrolera, n = 2 dla metody i n = 3 dla parametru i tak dalej.

Potrzebujesz n = 3, aby uzyskać parametr.

Na twojej ścieżce localhost/log/job/php brakuje Twojej nazwy metody.

Nawet jeśli nazwa metody jest index wtedy droga będzie localhost/log/job/index/php

W przypadku, gdy trzeba usunąć index.php z adresu URL, a następnie dostaniesz parametr używając localhost/log/index.php/job/index/php

Aby usunąć index.php Ciebie należy utworzyć plik .htaccess, wykonując następujące kroki:

  1. utworzyć plik .htaccess gdzie plik index.php znajduje się z treścią

    RewriteEngine on 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ index.php/$1 [L,QSA] 
    
  2. Upewnij się, że apache może uzyskać dostęp do tego pliku .htaccess. Aby to zrobić, edytuj plik konfiguracyjny Apache. Jeśli używasz Ubuntu, to jest /etc/apache2/sites-available/default, a następnie zmień AllowOverride none na dla katalogu i katalogu www.

    <Directory /> 
         Options FollowSymLinks 
         AllowOverride all 
        </Directory> 
        <Directory /var/www/> 
         Options Indexes FollowSymLinks MultiViews 
         AllowOverride all 
         Order allow,deny 
         allow from all 
        </Directory> 
    
  3. Następnie włączyć mod rewrite, jeśli go nie masz, za pomocą następującego polecenia:

    `sudo a2enmod rewrite` 
    
  4. Wreszcie nie zapomnij, aby ponownie uruchomić apache.

Mam nadzieję, że to pomoże.

0

przeznaczenie:

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

dodać .htaccess na katalogu (na Twój przypadek jest "log"):

RewriteEngine On 
RewriteBase /log/ 

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