web-dev-qa-db-ja.com

$ this-> set( 'title'、 'タイトル名'); CakePHP3.xで動作しない

基本的にdefault.ctpには、タイトルに次のものがあります。

<title>
  <?= $this->fetch('title') ?>
</title>

そして、コントローラーの内部には次の行があります。

$this->set('title', 'Test-Title');

ただし、何も実行せず、コントローラー名(ジョブ、コントローラーのフルネームos JobsController.ctp)が表示されます。

しかし、これをビューファイル内に置くと:

$this->assign('title', 'Test-Title');

タイトルを変更します。では、$ this-> set( 'title'、$ title)の何が問題になっていますか

10
Tachi

コントローラの変数をset()するだけです。

_// View or Controller
$this->set('title', 'Test-title');
_

次に、レイアウトまたはビューにある標準変数として使用します。

_<!-- Layout or View -->
<title>
    <?php echo $title; ?>
</title>
_

詳細はこちら: http://book.cakephp.org/3.0/en/views.html#setting-view-variables

assign()の使用は異なります。そのため、fetch()で機能します。 assign()はビューブロックで使用されます: http://book.cakephp.org/3.0/en/views.html#using-view-blocks

13
Dave

fetch()は、変数ではなくブロックの内容を返します。コントローラでset()を使用すると、変数をエコーすることでビューテンプレートに出力できる変数を設定できます。-

_<?php echo $title; ?>
_

fetch()を使用する場合は、ビューテンプレートでassign()と組み合わせて使用​​してブロックを定義する必要があります。たとえば、ビューテンプレートで次を使用します。-

_<?php $this->assign('title', $title); ?>
_

そして、レイアウトテンプレートで:-

_<title><?php echo $this->fetch('title'); ?></title>
_

CakePHP 3では、ページのレンダリングに関連するため、ビューでページタイトルを割り当てることでページタイトルを設定するという考え方があります。これは、コントローラーで_title_for_layout_を定義し、レイアウトテンプレートで_$title_for_layout_変数をエコーするCakePHP 2でこれが最初に処理された方法とは異なります(これは、CakePHP3アプローチを支持して非推奨になりました。 Cakeの新しいバージョン2)。

20
drmonkeyninja

コードに固執したい場合は、「title」変数を設定した後、次のように記述します。

    <?= __('Main Project Name') ?>
    <?php if( isset($title)) $this->assign('title', $title); ?>
    <?= ' - ' . $this->fetch('title') ?>
0
Nima Rahbar

私はこれをdefault.ctpでこのように行いました

<?php
    $cakeDescription = __d('cake_dev', 'Your Title');
?>

<title>
    <?php echo $cakeDescription ?>: <?php echo $title_for_layout; ?>
</title>

私のビューファイルでは、これを実行しました。

<?php $this->assign('title', 'Your Title');?>
0
A.A Noman

完了のために、<head></head>間で参照される未定義の変数を含む不正な形式の.jsスクリプトが<title></title>タグをDOMに投稿するという状況に遭遇しました(ページソースに表示)がChrome、Firefoxおよび(メモリから)[〜#〜] msie [〜#〜]allタイトルのコンテンツをAPP UIに配信できませんでしたが、これもメモリから-iOS mobileは影響を受けませんでした。

0
Mat Witts

CakePHP 3レイアウトテンプレートでは、タイトルを以下のように設定してください。

<title>
    <?= $this->fetch('title') ?>    
</title>

それからあなたの見解では:

<?php $this->assign('title', 'Title Name'); ?>

これは、CakePHPが組み込みのViewクラスを使用して、ページタイトル(ビューブロック)のレンダリングシナリオを処理する方法です。