2010-05-16 12 views

Répondre

13

Essayé de faire un contrôleur qui les a sorties tous correctement. Faites-moi savoir si l'un d'eux est éteint.

class Controller_Info extends Controller 
{ 
    public function action_index() 
    { 
     $uris = array 
     (
      'page' => array 
      (
       'a' => Request::instance()->uri(), 
       'b' => URL::base(TRUE, FALSE).Request::instance()->uri(), 
       'c' => URL::site(Request::instance()->uri()), 
       'd' => URL::site(Request::instance()->uri(), TRUE), 
      ), 

      'application' => array 
      (
       'a' => URL::base(), 
       'b' => URL::base(TRUE, TRUE), 
       'c' => URL::site(), 
       'd' => URL::site(NULL, TRUE), 
      ), 
     ); 

     $this->request->headers['Content-Type'] = 'text/plain'; 
     $this->request->response = print_r($uris, true); 
    } 

    public function action_version() 
    { 
     $this->request->response = 'Kohana version: '.Kohana::VERSION; 
    } 

    public function action_php() 
    { 
     phpinfo(); 
    } 

} 

Sorties ceci:

Array 
(
    [page] => Array 
     (
      [a] => info/index 
      [b] => /kohana/info/index 
      [c] => /kohana/info/index 
      [d] => http://localhost/kohana/info/index 
     ) 
    [application] => Array 
     (
      [a] => /kohana/ 
      [b] => http://localhost/kohana/ 
      [c] => /kohana/ 
      [d] => http://localhost/kohana/ 
     ) 
) 

Sur le plan technique, il est en fait que la première URL de la page qui est une véritable URL relative, puisque tous les autres, soit commencer par / ou http://.


Nécessaire pour obtenir moi-même l'URL de la page actuelle, j'ai donc décidé d'étendre la classe d'URL. Je pensais pouvoir le partager ici. Faites-moi savoir ce que vous pensez :)

/** 
* Extension of the Kohana URL helper class. 
*/ 
class URL extends Kohana_URL 
{ 
    /** 
    * Fetches the URL to the current request uri. 
    * 
    * @param bool make absolute url 
    * @param bool add protocol and domain (ignored if relative url) 
    * @return string 
    */ 
    public static function current($absolute = FALSE, $protocol = FALSE) 
    { 
     $url = Request::instance()->uri(); 

     if($absolute === TRUE) 
      $url = self::site($url, $protocol); 

     return $url; 
    } 
} 

echo URL::current();   // controller/action 
echo URL::current(TRUE);  // /base_url/controller/action 
echo URL::current(TRUE, TRUE); // http://domain/base_url/controller/action 
+2

sur Kohana 3.1+ vous devez passer une chaîne ('http ',' https ') ou un objet Request au paramètre $ protocol dans URL :: site. Et si vous souhaitez conserver la chaîne de requête, vous pouvez ajouter URL :: query() à la fin. – Enrique

7

Ne pas vous dire simplement: Kohana_Request :: detect_uri()?

+0

À la vôtre deux fois. Utiliser Request :: detect_uri() est parfait. –

2

URL absolue/actuelle relative:

// outputs 'http://www.example.com/subdir/controller/action' 
echo URL::site(Request::detect_uri(),true)); 

// outputs '/subdir/controller/action' 
echo URL::site(Request::detect_uri()); 

l'application absolue/actuelle relative URL:

// outputs 'http://www.example.com/subdir/' 
echo URL::site(NULL, TRUE); 

// outputs '/subdir/' 
echo URL::site(); 

Hope it helps