2010-05-16 23 views

Odpowiedz

13

Próbowałem stworzyć kontroler, który wyprowadził je wszystkie poprawnie. Daj mi znać, jeśli któryś z nich jest wyłączony.

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(); 
    } 

} 

Wyjścia to:

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/ 
     ) 
) 

Technicznie rzecz biorąc, jest to rzeczywiście tylko pierwsza strona url że to prawdziwy krewny url, ponieważ wszyscy inni albo zacząć / lub http://.


Potrzebne do uzyskania adresu URL dla bieżącej strony, więc zdecydowałem się przedłużyć klasę adresów URL. Pomyślałem, że mogę się nim podzielić tutaj. Daj mi znać, co myślisz :)

/** 
* 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

na Kohana 3.1 i nowsze trzeba przekazać ciąg ("http ',' https ') lub obiekt Request do parametru $ protocol w URL :: site. A jeśli chcesz zachować ciąg zapytania, możesz dodać URL :: query() na końcu. – Enrique

7

po prostu nie myśli: Kohana_Request :: detect_uri()?

+0

Pozdrawiam twicejr. Korzystanie z żądania :: detect_uri() jest idealne. –

2

bezwzględna/względna aktualny URL:

// 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()); 

bezwzględna/względna aktualny adres URL aplikacji:

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

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

Nadzieja pomaga