Как вы эхо отзываете текущий URL в представлении Cake?
Вы можете сделать
Из файла вида:
<?php echo $this->here; ?>
Который даст вам абсолютный url от имени хоста ie / controller / action / params
Или
<?php echo Router::url( $this->here, true ); ?>
который должен предоставить вам полный URL-адрес с именем хоста.
Я предпочитаю это, потому что, если я не упоминаю слово «запрос», моя 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/
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>
Редактор,
<?php echo $this->Html->url( null, true ); ?>
Следующий способ «Торт» полезен, потому что вы можете захватить полный текущий 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
массивы $request_copy->query
3) Наконец: $new_url = Router::reverse($request_copy, true)
.
Я знаю, что этот пост немного устарел, и версии CakePHP процветали с тех пор. В текущей версии (2.1.x) CakePHP и даже в 1.3.x, если я не ошибаюсь, можно получить текущий URL-адрес контроллера / просмотра следующим образом:
$this->params['url'];
Хотя этот метод НЕ возвращает параметры, это удобно, если вы хотите добавлять параметры к ссылке при создании новых URL-адресов. Например, у нас есть текущий URL:
проекты / редактировать / 6
И мы хотим добавить действие настраиваемого параметра c_action со значением remove_image, можно использовать $this->params['url];
и объединить его с массивом пар параметров: key => value:
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
Извините, если это нисколько не связано, но я столкнулся с этим вопросом при поиске метода для достижения вышеуказанного и думал, что другие могут извлечь из этого выгоду.
для CakePHP 3:
$this->Url->build(null, true) // full URL with hostname $this->Url->build(null) // /controller/action/params
Получение текущего 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; ?>">
Получение текущего 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 здесь
В объекте запроса у вас есть все, что вам нужно. Чтобы понять это:
debug($this->request->url);
и в вашем случае
$here = $this->request->url;
Cakephp 3.5:
echo $this->Url->build($this->request->getRequestTarget());
Вызов $ this-> request-> здесь () устарел с 3.4 и будет удален в 4.0.0. Вместо этого вы должны использовать getRequestTarget ().
Путь 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
для cakephp3 +:
$url = $this->request->scheme().'://'.$this->request->domain().$this->request->here(false);
получит, например: http://bgq.dev/home/index?t44=333
Я использую $this->here
для пути, чтобы получить весь URL, который вам нужно будет сделать, как сказал Юхана, и использовать переменные $_SERVER
. Для этого нет необходимости использовать функцию Cake.
Все ранее предложенные подходы не удовлетворяли моим требованиям для получения полного URL-адреса (как в квалифицированном), например, для использования в отправке по электронной почте из действия контроллера. Мне также нужна схема и имя хоста, и, таким образом, наткнулся на следующий подход:
<?php echo Router::url( array( $id ), true ) ?>
Из-за того, что маршрутизатор поддерживает контроллер тока, и действие сохраняется, однако идентификатор отсутствует и, следовательно, здесь должен быть предоставлен. Второй аргумент true
– это запрос на добавление имени хоста и т. Д. Для получения полного URL-адреса.
Использование Router :: url () доступно в любой ситуации и, следовательно, может использоваться и в файлах просмотра.
Да, это просто ПОЛНЫЙ URL-адрес в разделе «Управление» в CakePHP 1.3>
<?php echo Router::url( array('controller'=>$this->params['controller'],'action'=>$this->params['action']), true );
Saludos
Cakephp 3.x в любом месте:
Router::reverse(Router::getRequest(),true)
для 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
Использовать помощник Html
<?php echo $this->Html->url($this->here, true); ?>
Он создаст полный URL-адрес, который начинается с http или https
Ввиду:
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) ?>
Чтобы получить полный URL без параметров:
echo $this->Html->url('/', true);
вернет http(s)://(www.)your-domain.com