Как получить полный текущий URL для Cakephp - PullRequest
54 голосов
/ 27 июля 2011

Как вы выводите текущий URL в виде Cake?

Ответы [ 23 ]

80 голосов
/ 29 июля 2011

Вы можете сделать либо

Из файла просмотра:

<?php echo $this->here; ?>

Который даст вам абсолютный URL от имени хоста, т.е. / controller / action / params

Или

<?php echo Router::url( $this->here, true ); ?> 

, который должен дать вам полный URL с именем хоста.

47 голосов
/ 06 августа 2013

Я предпочитаю это, потому что, если я не упомяну слово "запрос", моя IDE выдаст предупреждение.

<?php echo $this->request->here; ?>

Документ API: Класс-CakeRequest


Edit: Чтобы уточнить все варианты

Current URL: http://example.com/en/controller/action/?query=12

// Router::url(null, true)
http://example.com/en/controller/action/

// Router::url(null, false)
/en/controller/action/

// $this->request->here
/en/controller/action/

// $this->request->here()
/en/controller/action/?query=12

// $this->request->here(false)
/en/controller/action/?query=12

// $this->request->url
en/controller/action

// $_SERVER["REQUEST_URI"]
/en/controller/action/?query=12

// strtok($_SERVER["REQUEST_URI"],'?');
/en/controller/action/
27 голосов
/ 27 июля 2011
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>

РЕДАКТИРОВАТЬ: или,

<?php echo $this->Html->url( null, true ); ?>
11 голосов
/ 15 ноября 2012

Следующий «Cake way» полезен, потому что вы можете получить полный текущий URL и изменить его части без необходимости вручную анализировать строку $_SERVER[ 'REQUEST_URI' ], а затем вручную объединить ее обратно в действительный URL для вывода.

Полный адрес URL: Router::reverse($this->request, true)

Простое изменение определенных частей текущего URL: 1) создайте копию объекта запроса Cake: $request_copy = $this->request

2) Затем измените массивы $request_copy->params и / или $request_copy->query

3) Наконец: $new_url = Router::reverse($request_copy, true).

7 голосов
/ 14 августа 2017

Cakephp 3.5:

echo $this->Url->build($this->request->getRequestTarget());

Вызов $ this-> request-> here () устарел с 3.4 и будет удален в 4.0.0. Вместо этого вы должны использовать getRequestTarget ().

6 голосов
/ 02 апреля 2012

Я знаю, что этот пост немного устарел, и версии CakePHP с тех пор процветали.В текущей (2.1.x) версии CakePHP и даже в 1.3.x, если я не ошибаюсь, текущий контроллер / URL-адрес просмотра можно получить так:

$this->params['url'];

Хотя этот метод НЕ возвращаетПараметры, это удобно, если вы хотите добавить параметры к ссылке при создании новых URL.Например, у нас есть текущий URL:

projects / edit / 6

И мы хотим добавить действие с пользовательским параметром c_action со значением remove_image, равным единицеможет использовать $this->params['url]; и объединить его с массивом пар пользовательских параметров ключ => значение:

echo $this->Html->link('remove image', array_merge($this->params['url'], array('c_action' => 'remove_image'));

Используя вышеописанный метод, мы можем добавлять наши пользовательские параметры в ссылку и не вызыватьдлинная цепочка параметров для создания на URL, потому что $ this-> params ['url] всегда возвращает только URL действия controll.

В приведенном выше примере нам нужно было бы вручную добавить идентификатор 6обратно в URL, поэтому, возможно, окончательная сборка ссылки будет выглядеть следующим образом:

echo $this->Html->link('remove image', array_merge($this->params['url'], array($id,'c_action' => 'remove_image'));

Где $ - это идентификатор проекта, и вы бы присвоили его переменной $ id вУровень контроллера .Тогда новый URL будет:

projects / edit / 6 / c_action: remove_image

Извините, если это не имеет никакого отношения, но я столкнулся с этим вопросом, когдав поисках метода для достижения вышесказанного и думал, что другие могут извлечь из этого пользу.

5 голосов
/ 08 сентября 2014

для CakePHP 3:

$this->Url->build(null, true) // full URL with hostname

$this->Url->build(null) // /controller/action/params
5 голосов
/ 05 апреля 2016

Получение текущего URL для CakePHP 3.x?

В вашем макете:

<?php 
    $here = $this->request->here();
    $canonical = $this->Url->build($here, true);
?>

Вы получите полный URL текущей страницы, включая параметры строки запроса.

например. http://website.example/controller/action?param=value

Вы можете использовать его в мета-теге canonical, если вам нужно заняться SEO.

<link rel="canonical" href="<?= $canonical; ?>">
4 голосов
/ 19 марта 2013

Получение текущего URL довольно просто в вашем файле просмотра

echo Router::url($this->here, true);

Это вернет полный URL http://www.example.com/subpath/subpath

Если вам нужен только относительный путь, используйте следующее

echo $this->here;

OR

В идеале Router :: url («», true) должен возвращать абсолютный URL-адрес текущего представления, но всегда возвращает относительный URL-адрес. Таким образом, взлом, чтобы получить абсолютный URL-адрес

$absolute_url  = FULL_BASE_URL + Router::url(“”, false);

Чтобы получить FULL_BASE_URL, проверьте здесь

3 голосов
/ 11 мая 2017

Чтобы получить полный URL без параметров:

echo $this->Html->url('/', true);

вернет http(s)://(www.)your-domain.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...