Ansichten
Webman verwendet standardmäßig die native PHP-Syntax als Vorlage, die bei aktivierendem opcache
die beste Leistung bietet. Neben der nativen PHP-Vorlage bietet Webman auch die Template-Engines Twig, Blade und think-template an.
Aktivieren von Opcache
Beim Arbeiten mit Ansichten wird dringend empfohlen, die Optionen opcache.enable
und opcache.enable_cli
in der php.ini
zu aktivieren, damit die Template-Engine die beste Leistung erreicht.
Twig installieren
- Installation mit Composer
composer require twig/twig
- Ändern Sie die Konfiguration in
config/view.php
zu:<?php use support\view\Twig;
return [
'handler' => Twig::class
];
> **Hinweis**
> Andere Konfigurationsoptionen werden über `options` übergeben, zum Beispiel:
```php
return [
'handler' => Twig::class,
'options' => [
'debug' => false,
'charset' => 'utf-8'
]
];
Blade installieren
- Installation mit Composer
composer require psr/container ^1.1.1 webman/blade
- Ändern Sie die Konfiguration in
config/view.php
zu:<?php use support\view\Blade;
return [
'handler' => Blade::class
];
## Think-template installieren
1. Installation mit Composer
`composer require topthink/think-template`
2. Ändern Sie die Konfiguration in `config/view.php` zu:
```php
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class,
];
Hinweis
Andere Konfigurationsoptionen werden überoptions
übergeben, zum Beispiel:
return [
'handler' => ThinkPHP::class,
'options' => [
'view_suffix' => 'html',
'tpl_begin' => '{',
'tpl_end' => '}'
]
];
Beispiel für native PHP-Template-Engine
Erstellen Sie die Datei app/controller/UserController.php
wie folgt:
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
return view('user/hello', ['name' => 'webman']);
}
}
Erstellen Sie die Datei app/view/user/hello.html
wie folgt:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello <?=htmlspecialchars($name)?>
</body>
</html>
Beispiel für Twig-Template-Engine
Ändern Sie die Konfiguration in config/view.php
zu:
<?php
use support\view\Twig;
return [
'handler' => Twig::class
];
Die Datei app/controller/UserController.php
sieht wie folgt aus:
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
return view('user/hello', ['name' => 'webman']);
}
}
Die Datei app/view/user/hello.html
sieht wie folgt aus:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {{name}}
</body>
</html>
Weitere Dokumentation finden Sie unter Twig
Beispiel für Blade-Template
Ändern Sie die Konfiguration in config/view.php
zu:
<?php
use support\view\Blade;
return [
'handler' => Blade::class
];
Die Datei app/controller/UserController.php
sieht wie folgt aus:
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
return view('user/hello', ['name' => 'webman']);
}
}
Die Datei app/view/user/hello.blade.php
sieht wie folgt aus:
Hinweis: Die Suffixe für Blade-Templates sind
.blade.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {{$name}}
</body>
</html>
Weitere Dokumentation finden Sie unter Blade
Beispiel für ThinkPHP-Template
Ändern Sie die Konfiguration in config/view.php
zu:
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class
];
Die Datei app/controller/UserController.php
sieht wie folgt aus:
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
return view('user/hello', ['name' => 'webman']);
}
}
Die Datei app/view/user/hello.html
sieht wie folgt aus:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {$name}
</body>
</html>
Weitere Dokumentation finden Sie unter think-template
Template-Zuweisung
Neben der Verwendung von view(Template, Variablenarray)
zur Zuweisung von Werten an das Template, können wir auch an beliebiger Stelle durch Aufruf von View::assign()
Werte an das Template zuweisen. Zum Beispiel:
<?php
namespace app\controller;
use support\Request;
use support\View;
class UserController
{
public function hello(Request $request)
{
View::assign([
'name1' => 'value1',
'name2'=> 'value2',
]);
View::assign('name3', 'value3');
return view('user/test', ['name' => 'webman']);
}
}
View::assign()
ist in bestimmten Szenarien sehr nützlich. Beispielsweise, wenn in einem System auf jeder Seite die Informationen des aktuell angemeldeten Benutzers angezeigt werden müssen, wäre es sehr umständlich, diese Informationen durch view('Template', ['user_info' => 'Benutzerinformationen']);
zuzuweisen. Die Lösung besteht darin, die Benutzerinformationen im Middleware abzurufen und dann View::assign()
zu verwenden, um die Benutzerinformationen der Vorlage zuzuweisen.
Informationen zu den Pfaden der Ansichtsdateien
Controller
Wenn der Controller view('TemplateName', []);
aufruft, wird die Ansichtsdatei nach folgenden Regeln gesucht:
- Beginnt mit
/
, wird der Pfad direkt verwendet, um die Ansichtsdatei zu suchen. - Beginnt nicht mit
/
und ist keine Multianwendung, wird die entsprechende Ansichtsdatei im Verzeichnisapp/view/
verwendet. - Beginnt nicht mit
/
und ist eine Multianwendung, wird die entsprechende Ansichtsdatei im Verzeichnisapp/Anwendungsname/view/
verwendet. - Wenn kein Template-Parameter übergeben wird, wird die Template-Datei automatisch gemäß den Regeln 2 und 3 gesucht.
Beispiel:
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
// Entspricht return view('user/hello', ['name' => 'webman']);
// Entspricht return view('/app/view/user/hello', ['name' => 'webman']);
return view(['name' => 'webman']);
}
}
Closure-Funktion
Die Closure-Funktion $request->app
ist leer und gehört zu keiner Anwendung, daher verwendet die Closure-Funktion die Ansichtsdateien im Verzeichnis app/view/
. Zum Beispiel, wenn in config/route.php
Routen definiert sind:
Route::any('/admin/user/get', function (Request $request) {
return view('user', []);
});
wird die Datei app/view/user.html
als Template-Datei verwendet (wenn die Blade-Template verwendet wird, lautet der Template-Dateiname app/view/user.blade.php
).
Bestimmte Anwendung
Um Templates im Multianwendungs-Modus wiederverwendbar zu machen, bietet view($template, $data, $app = null)
den dritten Parameter $app
, mit dem angegeben werden kann, aus welchem Anwendungsverzeichnis das Template verwendet werden soll. Zum Beispiel view('user', [], 'admin');
zwingt die Verwendung der Ansichtsdatei im Verzeichnis app/admin/view/
.
Template-Parameter weglassen
In der Klassensteuerung kann der Template-Parameter weggelassen werden, zum Beispiel:
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
// Entspricht return view('user/hello', ['name' => 'webman']);
// Entspricht return view('/app/view/user/hello', ['name' => 'webman']);
return view(['name' => 'webman']);
}
}
Twig erweitern
Wir können Twig-Ansichten durch Rückrufe in der Konfiguration view.extension
erweitern, zum Beispiel in config/view.php
:
<?php
use support\view\Twig;
return [
'handler' => Twig::class,
'extension' => function (\Twig\Environment $twig) {
$twig->addExtension(new your\namespace\YourExtension()); // Hinzufügen von Extension
$twig->addFilter(new \Twig\TwigFilter('rot13', 'str_rot13')); // Hinzufügen von Filter
$twig->addFunction(new \Twig\TwigFunction('function_name', function () {})); // Hinzufügen von Funktion
}
];
Blade erweitern
Auf ähnliche Weise können wir Blade-Ansichten durch Rückrufe in der Konfiguration view.extension
erweitern, zum Beispiel in config/view.php
:
<?php
use support\view\Blade;
return [
'handler' => Blade::class,
'extension' => function (Jenssegers\Blade\Blade $blade) {
// Anweisungen zu Blade hinzufügen
$blade->directive('mydate', function ($timestamp) {
return "<?php echo date('Y-m-d H:i:s', $timestamp); ?>";
});
}
];
Blade-Komponenten verwenden
Angenommen, wir möchten eine Alert-Komponente hinzufügen.
Erstellen Sie app/view/components/Alert.php
:
<?php
namespace app\view\components;
use Illuminate\View\Component;
class Alert extends Component
{
public function __construct()
{
}
public function render()
{
return view('components/alert')->rawBody();
}
}
Erstellen Sie app/view/components/alert.blade.php
:
<div>
<b style="color: red">hello blade component</b>
</div>
Ähnlicher Code in /config/view.php
:
<?php
use support\view\Blade;
return [
'handler' => Blade::class,
'extension' => function (Jenssegers\Blade\Blade $blade) {
$blade->component('alert', app\view\components\Alert::class);
}
];
Damit ist die Blade-Komponente Alert eingerichtet, die im Template wie folgt verwendet werden kann:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
<x-alert/>
</body>
</html>
think-template erweitern
think-template verwendet view.options.taglib_pre_load
, um die Tag-Bibliothek zu erweitern, zum Beispiel:
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class,
'options' => [
'taglib_pre_load' => your\namespace\Taglib::class,
]
];
Details finden Sie unter think-template-Tag-Erweiterung