Cakeのビューで現在のURLをどのようにエコーアウトしますか?
どちらでもできます
ビューファイルから:
<?php echo $this->here; ?>
ホスト名からの絶対URL、つまり/ controller/action/paramsが得られます
または
<?php echo Router::url( $this->here, true ); ?>
ホスト名を含む完全なURLが提供されます。
私がこれを好むのは、「リクエスト」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/
<?php echo $_SERVER[ 'REQUEST_URI' ]; ?>
編集者、
<?php echo $this->Html->url( null, true ); ?>
次の「ケーキの方法」は、_$_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のバージョンが栄えていることを知っています。 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
これがわずかでも無関係である場合は申し訳ありませんが、上記を達成するためのメソッドを検索するときにこの質問に出くわし、他の人がそれから利益を得る可能性があると考えました。
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);
?>
クエリ文字列パラメーターを含む現在のページの完全なURLを取得します。
例えば http://website.example/controller/action?param = value
何らかのSEOを行う必要がある場合は、正規のメタタグで使用できます。
<link rel="canonical" href="<?= $canonical; ?>">
ビューファイルで現在の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
パラメータなしで完全なURLを取得するには:
_echo $this->Html->url('/', true);
_
http(s)://(www.)your-domain.com
を返します
リクエストオブジェクトには、必要なものがすべてあります。理解するには:
debug($this->request->url);
あなたの場合
$here = $this->request->url;
私が見つけた最も簡単な方法は、Host/path/queryと
はControllers
(Cakephp 3.4
):
Cake\View\Helper\UrlHelper::build($this->request->getRequestTarget());
これは次のようなものを返します(ログインコールバックURLとして使用します):
http://192.168.0.57/archive?melkId=12
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
cakephp3 +の場合:
$url = $this->request->scheme().'://'.$this->request->domain().$this->request->here(false);
1.3のCakeの方法は、Router :: reverse:を使用することです。
$url = Router::reverse($this->params)
echo $url;
利回り
/Full/Path/From/Root/MyController/MyAction/passed1/named_param:bob/?param1=true¶m2=27
表示中:
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) ?>
CakePHP 3 $this->here
は廃止されます。実際の方法は、このメソッドを使用しています:
Router::url($this->request->getRequestTarget())
以前に提案されたすべてのアプローチは、完全なURL(資格のある完全な)を取得するための私の要件を満たしていませんでした。コントローラからのメール送信アクションで使用されます。スキームとホスト名も必要なので、次のアプローチにつまずいた:
<?php echo Router::url( array( $id ), true ) ?>
ルーターアレイを提供するため、現在のコントローラーとアクションが保持されますが、idは保持されないため、ここで再度提供する必要があります。 2番目の引数true
は、実際には完全なURLを取得するためにホスト名などを追加することを要求しています。
Router :: url()を使用することはあらゆる状況で利用可能であるため、ビューファイルでも使用できます。
どこでもCakephp 3.x:
Router::reverse(Router::getRequest(),true)
Htmlヘルパーを使用する
<?php echo $this->Html->url($this->here, true); ?>
Httpまたはhttpsから始まる完全なURLを生成します
はい、CakePHP 1.3のController Workの簡単なフルURLです>
<?php echo Router::url( array('controller'=>$this->params['controller'],'action'=>$this->params['action']), true );
サルード
いくつかの調査の後、これをCakePHP 3. *の完全な完全なURLとして取得しました。
$this->request->getUri();
フルURLは次のようになります
ここで読むことができる詳細情報:https://pritomkumar.blogspot.com/2017/04/how-to-get-complete-current-url-for.html
パスに$this->here
を使用して、Juhanaが言ったように$_SERVER
変数を使用する必要があるURL全体を取得します。このためにCake関数を使用する必要はありません。