Подтвердить что ты не робот

Как получить полный текущий URL для CakePHP

Как вы эхо отзываете текущий URL-адрес в режиме Cake?

4b9b3361

Ответ 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&param2=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