Include file php Errore

Ciao a tutti sono nuovo in Yii2 pertanto potrei dire anche cavolate ma ho un problema

nel mio main.php è più precisamente nel layout frontend ho il comando include di php

<?php

include (’_headerfrontend.php’);

?>

e questo è il file _headerfrontend.php :

<header class="header" >

&lt;?php 


		NavBar::begin([


				'brandLabel' =&gt; 'My Company',


				'brandUrl' =&gt; Yii::&#036;app-&gt;homeUrl,


				'options' =&gt; [


				'class' =&gt; 'navbar  navbar-static-top' ,


				'role' =&gt; 'navigation',


				'style' =&gt; 'margin-bottom : 0px',


		


				],


				]);


		&#036;menuItems = [


		['label' =&gt; 'Home', 'url' =&gt; ['/site/index']],


		['label' =&gt; 'About', 'url' =&gt; ['/site/about']],


		['label' =&gt; 'Contact', 'url' =&gt; ['/site/contact']],


		];


		if (Yii::&#036;app-&gt;user-&gt;isGuest) {


			&#036;menuItems[] = ['label' =&gt; 'Signup', 'url' =&gt; ['/site/signup']];


			&#036;menuItems[] = ['label' =&gt; 'Login', 'url' =&gt; ['/site/login']];


		} else {


			&#036;menuItems[] = [


			'label' =&gt; 'Logout (' . Yii::&#036;app-&gt;user-&gt;identity-&gt;username . ')',


			'url' =&gt; ['/site/logout'],


			'linkOptions' =&gt; ['data-method' =&gt; 'post']


			];


		}


		echo Nav::widget([


				'options' =&gt; ['class' =&gt; 'navbar-nav navbar-right'],


				'items' =&gt; &#036;menuItems,


				]);


		NavBar::end();


		?&gt;

</header>

Quando visualizzo la pagina principale mi da errore #2

ho notato nel sorgente mi visualizza oltre a tutta la pagina anche il div con classe header

per cui presumo che il file _headerfrontend.php lo trova ma perchè non esegue tutto il resto?

incluso nei tag <?php e ?>

dove sbaglio ?

Stai usando Yii quindi usa gli strumenti che Yii ti da! :)

Per includere viste in una vista ci sono i metodo appositi

ti ringrazio ma ho risolto nel file _headerfrontend.php mancano gli use del nav e navbar

ciao

Bene che hai risolto, ma non sottovaluterei quello che ha detto Nicola, implicitamente: yii tra le altre cose ha degli helper e dei metodi che non sono altro che wrapper ben scritti (e ben funzionanti, spesso con fallback in caso di errori) di funzioni php native, quindi è caldamente consigliato l’uso di yii e dei suoi strumenti in tutte le salse, piuttosto che dover reinventare la ruota tutte le volte.

Ciao ;)

Si, mi accodo anche io, NON fare a mano cose che Yii può e deve fare in automatico.

Quell’include poteva tranquillamente essere un renderPartial, o, ancora meglio, una modifica al tema

Scusate sono un po confuso :

vorrei dividere il main frontend in più viste in questa maniera

<?php

use yii\helpers\Html;

use yii\bootstrap\Nav;

use yii\bootstrap\NavBar;

use yii\widgets\Breadcrumbs;

use frontend\assets\AppAsset;

use frontend\widgets\Alert;

/* @var $this \yii\web\View */

/* @var $content string */

AppAsset::register($this);

?>

<?php $this->beginPage() ?>

<!DOCTYPE html>

<html lang="<?php Yii::$app->language ?>">

<head>

&lt;meta charset=&quot;&lt;?php Yii::&#036;app-&gt;charset ?&gt;&quot;/&gt;


&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;


&lt;?php Html::csrfMetaTags() ?&gt;


&lt;title&gt;&lt;?= Html::encode(&#036;this-&gt;title) ?&gt;&lt;/title&gt;


&lt;?php &#036;this-&gt;head() ?&gt;

</head>

<body class="skin-blue">

&lt;?php &#036;this-&gt;beginBody()  ?&gt;


 


&lt;div class=&quot;wrap&quot;&gt;


	&#60;&#33;--  Inizio Header Navbar  --&#62;








		&lt;?php include(Yii::getAlias('@common') . '/layouts/_headerfrontend.php');?&gt;





	&#60;&#33;--  Fine Header Navbar  --&#62;





	&#60;&#33;--  Inizio Content  --&#62;


		&lt;?php include (Yii::getAlias('@common') . '/layouts/_content.php');?&gt;


	&#60;&#33;--  Fine Content  --&#62;


&lt;/div&gt;


	&#60;&#33;--  Inizio Footer  --&#62;


  		&lt;?php include (Yii::getAlias('@common') . '/layouts/_footer.php');?&gt;


	&#60;&#33;--  Fine Footer  --&#62;





&lt;?php &#036;this-&gt;endBody() ?&gt;

</body>

</html>

<?php $this->endPage() ?>

come vedete il main è stato diviso in Header Content e Footer

utilizzando il comando include di php utilizzando invece come dite voi

i comandi yii2 cosa dovrei fare ?

Il file che ci hai copia/incollato qui sopra, immagino e spero che sia il view\layouts\main.php. Me lo confermi?

Ah, se è così, allora ha senso usare include/require… pensavo che stavi modificando una VISTA

infatti è il main sotto view/layout

quindi ho fatto bene

grazie

Mi intrometto solo per dire che anche main.php è una vista (per vista si intende un oggetto \yii\web\View), come avrai notato tra i commenti c’è




/**

 * @var \yii\web\View $this

 * @var string $content

 */



che ti dice proprio che $this è una istanza di \yii\web\View :)

Quindi se, ad esempio, hai questi due files dentro view/layout:

  • main.php

  • _header.php

nel main.php andrai a mettere:




...

<?= $this->render('_header'); ?>

...



Se vuoi passare una variabile o un oggetto ad una vista andrai ad aggiungere un parametro a render(), in questo modo:




...

<?= $this->render('_content', ['content' => $content]); ?>

...



In realtà, per quello che vuoi fare tu, potrebbe anche essere comodo usare i blocchi, ma ovviamente sta allo sviluppatore scegliere come strutturare la sua app!

Wow, Nicola, ti darei +2 invece che +1 perchè ho imparato 2 cose in un colpo solo

  • cosa sono i blocchi

  • che render funziona anche dentro alle view del layout (non avevo mai avuto bisogno di farlo)