7

次の質問について教えてください。取得方法:

現在の絶対/相対 URL

絶対/相対アプリケーション URL

もちろん、ネイティブ php を使用して取得することもできますが、むしろ ko3 関数を使用する必要があると思います。

それがどのように機能するか考えていますか?

前もって感謝します!

4

3 に答える 3

13

それらをすべて正しく出力するコントローラーを作ってみました。それらのいずれかがオフになっている場合はお知らせください。

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

}

これを出力します:

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

/技術的に言えば、他のすべてのURLはまたはで始まるため、実際には最初のページのURLだけが実際の相対URLになりますhttp://


現在のページのURLを自分で取得する必要があったため、urlクラスを拡張することにしました。ここで共有できると思いました。どう考えているか教えてください :)

/**
 * 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
于 2010-05-16T12:47:34.793 に答える
7

Kohana_Request::detect_uri() という意味ではありませんか?

于 2011-02-13T15:26:18.870 に答える
2

現在の絶対/相対 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());

絶対/相対現在のアプリケーション URL:

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

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

それが役に立てば幸い

于 2012-11-06T11:26:04.573 に答える