programing tip

Cakephp에 대한 완전한 현재 URL을 얻는 방법

itbloger 2021. 1. 9. 09:34
반응형

Cakephp에 대한 완전한 현재 URL을 얻는 방법


Cake의 관점에서 현재 URL을 어떻게 에코합니까?


당신은 둘 중 하나를 할 수 있습니다

보기 파일에서 :

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

호스트 이름 (예 : / controller / action / params)에서 절대 URL을 제공합니다.

또는

<?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 ); ?>

다음 "Cake way"는 $_SERVER[ 'REQUEST_URI' ]문자열을 수동으로 구문 분석 한 다음 출력을 위해 유효한 URL로 다시 연결 하지 않고도 전체 현재 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).


Cakephp 3.5 :

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

$ this-> request-> here () 호출은 3.4부터 사용되지 않으며 4.0.0에서 제거됩니다. 대신 getRequestTarget ()을 사용해야합니다.


나는이 포스트가 약간 구식이고 CakePHP 버전이 그 이후로 번성했다는 것을 알고 있습니다. 현재 (2.1.x) 버전의 CakePHP와 1.3.x에서도 내가 잘못하지 않았다면 현재 컨트롤러 / 뷰 URL을 다음과 같이 얻을 수 있습니다.

$this->params['url'];

이 메서드는 매개 변수를 반환하지 않지만 새 URL을 만들 때 링크에 매개 변수를 추가하려는 경우 편리합니다. 예를 들어 현재 URL이 있습니다.

프로젝트 / 편집 / 6

그리고 우리는 remove_image 값을 가진 c_action이라는 사용자 지정 매개 변수 작업을 추가하려고합니다. 사용자 $this->params['url];지정 매개 변수 키 => 값 쌍의 배열을 사용 하고 병합 할 수 있습니다 .

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

$ this-> params [ 'url]은 제어 작업 URL 만 반환하기 때문에 위의 방법을 사용하여 맞춤 매개 변수를 링크에 추가 할 수 있으며 매개 변수에 긴 체인이 URL에 구축되지 않도록 할 수 있습니다.

위의 예에서 ID 6을 URL에 다시 수동으로 추가해야하므로 최종 링크 빌드는 다음과 같습니다.

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

$ is는 프로젝트의 ID이고 컨트롤러 수준에서 $ id 변수에 할당했을 것 입니다. 새 URL은 다음과 같습니다.

projects / edit / 6 / c_action : remove_image

이것이 약간 관련이 없다면 미안하지만 위의 사항을 달성하는 방법을 찾을 때이 질문을 보았고 다른 사람들이 도움이 될 것이라고 생각했습니다.


CakePHP 3 :

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

$this->Url->build(null) // /controller/action/params

CakePHP 3.x의 현재 URL을 얻고 있습니까?

레이아웃에서 :

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

You will get the full URL of the current page including query string parameters.

e.g. http://website.example/controller/action?param=value

You can use it in a meta tag canonical if you need to do some SEO.

<link rel="canonical" href="<?= $canonical; ?>">

Getting the current URL is fairly straight forward in your view file

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

This will return the full url http://www.example.com/subpath/subpath

If you just want the relative path, use the following

echo $this->here;

OR

Ideally Router::url(“”, true) should return an absolute URL of the current view, but it always returns the relative URL. So the hack to get the absolute URL is

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

To get FULL_BASE_URL check here


In the request object you have everything you need. To understand it:

debug($this->request->url);

and in your case

$here = $this->request->url;

To get the full URL without parameters:

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

will return http(s)://(www.)your-domain.com


The Cake way for 1.3 is to use Router::reverse:

Link to documentation

$url = Router::reverse($this->params)
echo $url;

yields

/Full/Path/From/Root/MyController/MyAction/passed1/named_param:bob/?param1=true&param2=27

for CakePHP 3.x You can use UrlHelper:

$this->Url->build(null, true) // output http://somedomain.com/app-name/controller/action/params

$this->Url->build() // output /controller/action/params

Or you can use PaginatorHelper (in case you want to use it in javascript or ...):

$this->Paginator->generateUrl() // returns a full pagination URL without hostname

$this->Paginator->generateUrl([],null,true) // returns a full pagination URL with hostname

for cakephp3+:

$url = $this->request->scheme().'://'.$this->request->domain().$this->request->here(false);

will get eg: http://bgq.dev/home/index?t44=333


In View:

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

In Controller

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

The simplest way I found is it that includes host/path/query and
works in Controllers (Cakephp 3.4):

Cake\View\Helper\UrlHelper::build($this->request->getRequestTarget());

which returns something like this (we use it as login callback url) :

http://192.168.0.57/archive?melkId=12

I use $this->here for the path, to get the whole URL you'll have to do as Juhana said and use the $_SERVER variables. There's no need to use a Cake function for this.


All previously proposed approaches didn't satisfy my requirements for getting a complete URL (complete as in qualified) e.g. to be used in an email send from controller action. I need the scheme and hostname as well then, and thus stumbled over the following approach:

<?php echo Router::url( array( $id ), true ) ?>

Due to providing router array current controller and action is kept, however id isn't and thus has to be provided here again. Second argument true is actually requesting to prepend hostname etc. for getting full URL.

Using Router::url() is available in every situation and thus can be used in view files as well.


Yes, is easy FULL URL in Controler Work in CakePHP 1.3 >

<?php echo Router::url( array('controller'=>$this->params['controller'],'action'=>$this->params['action']), true );

Saludos


Cakephp 3.x anywhere:

Router::reverse(Router::getRequest(),true)

Use Html helper

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

It'll produce the full url which'll started from http or https


In CakePHP 3 $this->here will be deprecated. The actual way is using this method:

Router::url($this->request->getRequestTarget())

After a few research, I got this as perfect Full URL for CakePHP 3.*

$this->request->getUri();

the Full URL will be something like this

http://example.com/books/edit/12

More info you can read here: https://pritomkumar.blogspot.com/2017/04/how-to-get-complete-current-url-for.html

ReferenceURL : https://stackoverflow.com/questions/6836990/how-to-get-complete-current-url-for-cakephp

반응형