2010-05-16 8 views

Antwort

13

Versucht, einen Controller zu machen, der sie alle korrekt ausgegeben hat. Lass es mich wissen, wenn einer von ihnen aus ist.

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

} 

Gibt folgendes:

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

Technisch gesehen ist es eigentlich nur die erste Seite URL, die eine echte relative URL ist, da alle anderen entweder mit / oder http:// starten.

Benötigt, um die URL für die aktuelle Seite selbst, also entschieden, um die URL-Klasse zu erweitern. Ich dachte, ich könnte es hier teilen. Lassen Sie mich wissen, was Sie denken :)

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

auf Kohana hilft 3.1+ Sie eine Zeichenfolge übergeben müssen ('http ',' https ') oder ein Request-Objekt für den Parameter $ protocol in URL :: site. Wenn Sie die Abfragezeichenfolge beibehalten möchten, können Sie am Ende URL :: query() hinzufügen. – Enrique

7

Sie nicht nur bedeuten: Kohana_Request :: detect_uri()?

+0

Cheers zweimal jr. Die Verwendung von Request :: detect_uri() ist perfekt. –

2

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

Absolute/Relative aktuelle Anwendung URL:

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

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

Hoffe, dass es