2015-05-11 3 views
9

in default.ctp Ich habe diese für meinen Titel nicht funktioniert:

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

Und im Inneren des Controllers Ich habe diese Zeile:

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

Aber es tut nichts, es zeigt immer noch Controller Namen (Jobs, Controller vollständigen Name o JobsController.ctp)

Aber wenn ich diese Innenseite meiner Ansicht file:

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

Es ändert den Titel. Also was ist los mit $ this-> set ('title', $ title) ?

Antwort

11

Sie können nur set() die Variablen in Ihrem Controller:

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

dann verwenden, als ein Standard-Variable in Ihrem Layout oder Ansicht ist:

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

Details: http://book.cakephp.org/3.0/en/views.html#setting-view-variables

Die Verwendung von assign() ist anders, weshalb es mit fetch() funktioniert. assign() wird mit View-Blöcken verwendet: http://book.cakephp.org/3.0/en/views.html#using-view-blocks

+0

Ja, ich weiß, dass ich diese innerhalb der Ansicht tun kann, aber ich will es im Inneren des Controllers zu tun, sollte es auch innerhalb der Steuerung arbeiten, aber es funktioniert nicht – Tachi

+0

Das Gleiche gilt für Controller - nicht 'fetch()' es, benutze es einfach. – Dave

17

fetch() gibt den Inhalt eines Blocks keine Variable zurück. Mit set() in dem Controller setzt eine Variable, die durch Echo der variablen Ausgang in Ihren View-Vorlagen kann sein: -

<?php echo $title; ?> 

Wenn Sie fetch() Sie es mit assign() in den Ansicht-Vorlagen in Kombination verwenden müssen, verwenden, um Definieren Sie den Block. Zum Beispiel in Ihrer View-Vorlage verwenden: -

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

Und dann in der Layout-Vorlage: -

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

In CakePHP 3 die Idee ist, den Seitentitel zu setzen, indem sie in der Darstellung als es die Zuordnung bezieht sich auf das Rendern der Seite. Dies unterscheidet sich von der ursprünglichen Vorgehensweise in CakePHP 2, wo Sie in Ihrem Controller title_for_layout definieren und dann die Variable $title_for_layout in der Layoutvorlage widergeben (in späteren Versionen von Cake 2 war dies zugunsten des CakePHP 3-Ansatzes veraltet).

+1

Randnotiz, der Standardwert 'title' Blockwert wird in [**' Cake \ View \ View :: renderLayout() '**] zugewiesen (http://api.cakephp.org/3.0/source-class-Cake) .View.View.html # 477-513), sie wird vom Wert 'View :: $ viewPath' abgeleitet. – ndm

+0

funktioniert die Zuweisung wie benötigt, danke – mewc

0

Nur für den Abschluss, ich auf eine Situation kam, wo ein fehlerhafter Js-Skript mit undefinierten Variablen referenziert zwischen <head></head> in den <title></title> Tags führte zu DOM geschrieben werden (gezeigt in Seitenquelle), aber Chrome, Firefox und (aus dem Gedächtnis) MSIEalle konnte nicht den Inhalt des Titels an die APP-Benutzeroberfläche liefern, wieder aus dem Speicher - iOS Mobile wurde nicht betroffen.

0

Wenn Sie Ihren Code bleiben wollen, nachdem Sie "Titel" Variable diese einfach nur schreiben:

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

ich dies getan haben, auf diese Weise in default.ctp

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

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

Meiner Ansicht Datei , Ich hab's gemacht.

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