web-dev-qa-db-ja.com

Cakephpの現在の完全なURLを取得する方法

Cakeのビューで現在のURLをどのようにエコーアウトしますか?

54

どちらでもできます

ビューファイルから:

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

ホスト名からの絶対URL、つまり/ controller/action/paramsが得られます

または

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

ホスト名を含む完全なURLが提供されます。

80
Abba Bryant

私がこれを好むのは、「リクエスト」Wordに言及しない場合、私の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/
48
trante
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>

編集者、

<?php echo $this->Html->url( null, true ); ?>
27
JJJ

次の「ケーキの方法」は、_$_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)

11
Costa

Cakephp 3.5:

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

$ this-> request-> here()の呼び出しは3.4以降廃止され、4.0.0で削除されます。代わりにgetRequestTarget()を使用する必要があります。

7
AndreyP

私はこの投稿が少し古くなっており、CakePHPのバージョンが栄えていることを知っています。 CakePHPの現在のバージョン(2.1.x)および1.3.xでさえ、私が間違っていなければ、次のように現在のコントローラー/ビューのURLを取得できます。

$this->params['url'];

このメソッドはパラメーターを返しませんが、新しいURLを作成するときにパラメーターをリンクに追加する場合に便利です。たとえば、現在のURLがあります。

projects/edit/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

これがわずかでも無関係である場合は申し訳ありませんが、上記を達成するためのメソッドを検索するときにこの質問に出くわし、他の人がそれから利益を得る可能性があると考えました。

6
SimonDowdles

cakePHP 3の場合:

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

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

CakePHP 3.xの現在のURLを取得していますか?

あなたのレイアウトで:

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

クエリ文字列パラメーターを含む現在のページの完全なURLを取得します。

例えば http://website.example/controller/action?param = value

何らかのSEOを行う必要がある場合は、正規のメタタグで使用できます。

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

ビューファイルで現在の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チェックを取得するには here

4
Subodh Ghulaxe

パラメータなしで完全なURLを取得するには:

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

http(s)://(www.)your-domain.comを返します

3
Thomas Rbt

リクエストオブジェクトには、必要なものがすべてあります。理解するには:

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

あなたの場合

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

私が見つけた最も簡単な方法は、Host/path/queryと
ControllersCakephp 3.4):

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

これは次のようなものを返します(ログインコールバックURLとして使用します):

http://192.168.0.57/archive?melkId=12
1
MSS

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
1
Br.sasa

cakephp3 +の場合:

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

例: http://bgq.dev/home/index?t44=3

1
Cao Vison

1.3のCakeの方法は、Router :: reverse:を使用することです。

ドキュメントへのリンク

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

利回り

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

表示中:

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) ?>
1
Markus Ethur

CakePHP 3 $this->hereは廃止されます。実際の方法は、このメソッドを使用しています:

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

以前に提案されたすべてのアプローチは、完全なURL(資格のある完全な)を取得するための私の要件を満たしていませんでした。コントローラからのメール送信アクションで使用されます。スキームとホスト名も必要なので、次のアプローチにつまずいた:

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

ルーターアレイを提供するため、現在のコントローラーとアクションが保持されますが、idは保持されないため、ここで再度提供する必要があります。 2番目の引数trueは、実際には完全なURLを取得するためにホスト名などを追加することを要求しています。

Router :: url()を使用することはあらゆる状況で利用可能であるため、ビューファイルでも使用できます。

0
soletan

どこでもCakephp 3.x:

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

Htmlヘルパーを使用する

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

Httpまたはhttpsから始まる完全なURLを生成します

0
Samphors

はい、CakePHP 1.3のController Workの簡単なフルURLです>

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

サルード

0
User

いくつかの調査の後、これをCakePHP 3. *の完全な完全なURLとして取得しました。

$this->request->getUri();

フルURLは次のようになります

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

ここで読むことができる詳細情報:https://pritomkumar.blogspot.com/2017/04/how-to-get-complete-current-url-for.html

0
Marwan Salim

パスに$this->hereを使用して、Juhanaが言ったように$_SERVER変数を使用する必要があるURL全体を取得します。このためにCake関数を使用する必要はありません。

0
Dunhamzzz