Как вы эхо отзываете текущий URL-адрес в режиме Cake?
Как получить полный текущий URL для CakePHP
Ответ 1
Вы можете сделать
Из файла вида:
<?php echo $this->here; ?>
Что даст вам абсолютный URL-адрес от имени хоста i.e./controller/action/params
или
<?php echo Router::url( $this->here, true ); ?>
который должен предоставить вам полный URL-адрес с именем хоста.
Ответ 2
Я предпочитаю это, потому что, если я не упоминаю слово "запрос", моя IDE дает предупреждение.
<?php echo $this->request->here; ?>
Документ API: class-CakeRequest
Изменить: Чтобы прояснить все параметры
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/
Ответ 3
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>
EDIT: или,
<?php echo $this->Html->url( null, true ); ?>
Ответ 4
Следующий способ "Торт" полезен, потому что вы можете захватить полный текущий URL-адрес и изменить его части без ручного анализа строки $_SERVER[ 'REQUEST_URI' ]
, а затем вручную объединить его обратно в действительный URL-адрес для вывода.
Полный текущий URL: Router::reverse($this->request, true)
Легко модифицировать определенные части текущего URL:
1) сделать копию объекта запроса торта:
$request_copy = $this->request
2) Затем измените $request_copy->params
и/или $request_copy->query
массивы
3) Наконец: $new_url = Router::reverse($request_copy, true)
.
Ответ 5
Я знаю, что этот пост немного устарел, и версии CakePHP процветали с тех пор. В текущей версии (2.1.x) CakePHP и даже в 1.3.x, если я не ошибаюсь, можно получить текущий URL-адрес контроллера/вида, например:
$this->params['url'];
Хотя этот метод НЕ возвращает параметры, это удобно, если вы хотите добавить параметры к ссылке при создании новых URL-адресов. Например, у нас есть текущий URL:
Проекты/редактировать/6
И мы хотим добавить пользовательское действие параметра c_action со значением remove_image, можно использовать $this->params['url];
и объединить его с массивом пар параметров с параметрами key = > :
echo $this->Html->link('remove image', array_merge($this->params['url'], array('c_action' => 'remove_image'));
Используя вышеописанный метод, мы можем добавить наши пользовательские параметры к ссылке и не вызывать длинную цепочку параметров для создания URL-адреса, потому что $this- > params ['url] только когда-либо возвращает URL-адрес элемента управления.
В приведенном выше примере нам нужно вручную добавить идентификатор 6 обратно в URL-адрес, так что окончательная компоновка ссылок будет выглядеть следующим образом:
echo $this->Html->link('remove image', array_merge($this->params['url'], array($id,'c_action' => 'remove_image'));
Где $is - это идентификатор проекта, и вы назначили его переменной $id на уровне контроллера. Новый URL-адрес будет следующим:
Проекты/редактировать/6/c_action: remove_image
Извините, если это ни малейшее несвязанное, но я столкнулся с этим вопросом при поиске метода для достижения вышеуказанного и думал, что другие могут извлечь выгоду из него.
Ответ 6
для CakePHP 3:
$this->Url->build(null, true) // full URL with hostname
$this->Url->build(null) // /controller/action/params
Ответ 7
Получение текущего 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; ?>">
Ответ 8
Получение текущего URL-адреса довольно прямо в вашем файле просмотра
echo Router::url($this->here, true);
Это вернет полный URL http://www.example.com/subpath/subpath
Если вам нужен только относительный путь, используйте следующие
echo $this->here;
ИЛИ
В идеале Router:: url ("", true) должен возвращать абсолютный URL текущего вида, но он всегда возвращает относительный URL. Таким образом, взломать абсолютный URL-адрес -
$absolute_url = FULL_BASE_URL + Router::url("", false);
Чтобы получить FULL_BASE_URL, проверьте здесь
Ответ 9
В объекте запроса у вас есть все, что вам нужно. Чтобы понять это:
debug($this->request->url);
и в вашем случае
$here = $this->request->url;
Ответ 10
Cakephp 3.5:
echo $this->Url->build($this->request->getRequestTarget());
Вызов $this- > request- > здесь() устарел с 3.4 и будет удален в 4.0.0. Вместо этого вы должны использовать getRequestTarget().
Ответ 11
Путь Cake для 1.3 - использовать Router:: reverse:
$url = Router::reverse($this->params)
echo $url;
дает
/Full/Path/From/Root/MyController/MyAction/passed1/named_param:bob/?param1=true¶m2=27
Ответ 12
для cakephp3 +:
$url = $this->request->scheme().'://'.$this->request->domain().$this->request->here(false);
получит, например: http://bgq.dev/home/index?t44=333
Ответ 13
Я использую $this->here
для пути, чтобы получить весь URL, который вам нужно будет сделать, как сказал Юхана, и использовать переменные $_SERVER
. Для этого нет необходимости использовать функцию Cake.
Ответ 14
Все ранее предложенные подходы не удовлетворяли моим требованиям для получения полного URL-адреса (как в квалифицированном), например. для использования в отправке по электронной почте из действия контроллера. Мне также нужна схема и имя хоста, и, таким образом, наткнулся на следующий подход:
<?php echo Router::url( array( $id ), true ) ?>
В связи с тем, что контроллер контроллера массива маршрутизатора и действие сохранены, однако идентификатор отсутствует и, следовательно, здесь должен быть предоставлен. Второй аргумент true
на самом деле просит указать имя хоста и т.д. Для получения полного URL-адреса.
Использование Router:: url() доступно в любой ситуации и, следовательно, может использоваться и в файлах просмотра.
Ответ 15
Да, легко ПОЛНЫЙ URL-адрес в работе с контроллером в CakePHP 1.3 >
<?php echo Router::url( array('controller'=>$this->params['controller'],'action'=>$this->params['action']), true );
Saludos
Ответ 16
Cakephp 3.x где угодно:
Router::reverse(Router::getRequest(),true)
Ответ 17
для CakePHP 3.x Вы можете использовать UrlHelper
:
$this->Url->build(null, true) // output http://somedomain.com/app-name/controller/action/params
$this->Url->build() // output /controller/action/params
Или вы можете использовать PaginatorHelper
(в случае, если вы хотите использовать его в javascript или...):
$this->Paginator->generateUrl() // returns a full pagination URL without hostname
$this->Paginator->generateUrl([],null,true) // returns a full pagination URL with hostname
Ответ 18
Использовать помощник HTML
<?php echo $this->Html->url($this->here, true); ?>
Он выдает полный URL-адрес, который начинается с http или https
Ответ 19
В представлении:
Blank URL: <?php echo $this->Html->Url('/') ?>
Blank Full Url: <?php echo $this->Html->Url('/', true) ?>
Current URL: <?php echo $this->Html->Url($this->here) ?>
Current Full URL: <?php echo $this->Html->Url($this->here, true) ?>
В контроллере
Blank URL: <?php echo Router::url('/') ?>
Blank Full Url: <?php echo Router::url('/', true) ?>
Current URL: <?php echo Router::url($this->request->here()) ?>
Current Full URL: <?php echo Router::url($this->request->here(), true) ?>
Ответ 20
Чтобы получить полный URL без параметров:
echo $this->Html->url('/', true);
вернет http(s)://(www.)your-domain.com