Ansichten
Webman verwendet standardmäßig die native PHP-Syntax als Vorlage und erreicht nach dem Öffnen von opcache die beste Leistung. Neben der nativen PHP-Vorlage bietet Webman auch Vorlagen-Engines wie Twig, Blade und think-template.
Opcache aktivieren
Beim Verwenden von Ansichten wird dringend empfohlen, die Optionen opcache.enable und opcache.enable_cli in der php.ini zu aktivieren, um die optimale Leistung der Vorlagen-Engine zu erreichen.
Twig installieren
-
Composer installieren
composer require twig/twig -
Konfigurationsänderung in
config/view.php:
<?php
use support\view\Twig;
return [
'handler' => Twig::class
];
Hinweis
Andere Konfigurationsoptionen werden überoptionsübergeben, zum Beispiel:
return [
'handler' => Twig::class,
'options' => [
'debug' => false,
'charset' => 'utf-8'
]
];
Blade installieren
-
Composer installieren
composer require psr/container ^1.1.1 webman/blade -
Konfigurationsänderung in
config/view.php:
<?php
use support\view\Blade;
return [
'handler' => Blade::class
];
Think-Template installieren
-
Composer installieren
composer require topthink/think-template -
Konfigurationsänderung in
config/view.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-Vorlagen-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-Vorlagen-Engine
Ändern Sie die Konfiguration in config/view.php wie folgt:
<?php
use support\view\Twig;
return [
'handler' => Twig::class
];
app/controller/UserController.php sieht folgendermaßen 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 folgendermaßen aus:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {{name}}
</body>
</html>
Weitere Informationen finden Sie in der Twig-Dokumentation.
Beispiel für Blade-Vorlagen-Engine
Ändern Sie die Konfiguration in config/view.php wie folgt:
<?php
use support\view\Blade;
return [
'handler' => Blade::class
];
app/controller/UserController.php sieht folgendermaßen 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 folgendermaßen aus:
Beachten Sie, dass die Blade-Dateierweiterung
.blade.phpist.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {{$name}}
</body>
</html>
Weitere Informationen finden Sie in der Blade-Dokumentation.
Beispiel für ThinkPHP-Vorlagen-Engine
Ändern Sie die Konfiguration in config/view.php wie folgt:
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class
];
app/controller/UserController.php sieht folgendermaßen 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 folgendermaßen aus:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {$name}
</body>
</html>
Weitere Informationen finden Sie in der ThinkPHP-Dokumentation.
Vorlagenzuweisung
Neben der Verwendung von view(template, variable_array) zur Zuweisung von Vorlagen können wir auch jederzeit mithilfe von View::assign() Vorlagen 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 einigen Szenarien sehr nützlich, zum Beispiel wenn auf jeder Seite eines Systems Informationen zum angemeldeten Benutzer angezeigt werden müssen. Es wäre umständlich, diese Informationen auf jeder Seite mit view('template', ['user_info' => 'user info']) zuzuweisen. Die Lösung besteht darin, die Benutzerinformationen im Middleware zu erhalten und sie mit View::assign() der Vorlage zuzuweisen.
Über die Pfade der Vorlagendateien
Controller
Wenn ein Controller view('template_name', []) aufruft, werden die Vorlagendateien gemäß den folgenden Regeln gesucht:
- Beginnt der Pfad mit
/, wird dieser Pfad direkt zur Suche der Vorlagendatei verwendet. - Beginnt der Pfad nicht mit
/und handelt es sich nicht um eine Mehrfachanwendung, werden die entsprechenden Vorlagendateien unterapp/view/verwendet. - Beginnt der Pfad nicht mit
/und handelt es sich um eine Mehrfachanwendung, werden die entsprechenden Vorlagendateien unterapp/application_name/view/verwendet. - Wird kein Vorlagenparameter übergeben, wird die Vorlagendatei automatisch gemäß den Regeln 2 und 3 ermittelt.
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 mit $request->app leer gehört keiner Anwendung an. Daher verwendet sie die Vorlagendateien unter app/view/, z.B. wenn Routen in der Datei config/route.php definiert sind:
Route::any('/admin/user/get', function (Request $request) {
return view('user', []);
});
Es werden die Vorlagendateien unter app/view/user.html (bei Verwendung von Blade ist die Vorlagendatei app/view/user.blade.php) verwendet.
Anwendung spezifizieren
Um Vorlagen in einer Mehrfachanwendung wiederverwenden zu können, bietet view($template, $data, $app = null) einen dritten Parameter $app, um anzugeben, welche Anwendungsverzeichnisse für Vorlagen verwendet werden sollen. Zum Beispiel wird view('user', [], 'admin') dazu führen, dass die Vorlagendateien unter app/admin/view/ verwendet werden.
Vorlagenparameter weglassen
In klassenbasierten Controllern kann der Vorlagenparameter weggelassen werden. 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
Hinweis
Diese Funktion erfordert webman-framework>=1.4.8
Wir können die Twig-Ansichtsinstanz erweitern, indem wir der Konfiguration view.extension eine Rückruffunktion hinzufügen. Zum Beispiel config/view.php:
<?php
use support\view\Twig;
return [
'handler' => Twig::class,
'extension' => function (Twig\Environment $twig) {
$twig->addExtension(new your\namespace\YourExtension()); // Erweiterung hinzufügen
$twig->addFilter(new Twig\TwigFilter('rot13', 'str_rot13')); // Filter hinzufügen
$twig->addFunction(new Twig\TwigFunction('function_name', function () {})); // Funktion hinzufügen
}
];
Blade erweitern
Hinweis
Diese Funktion erfordert webman-framework>=1.4.8
Ebenso können wir die Blade-Ansichtsinstanz erweitern, indem wir der Konfigurationview.extensioneine Rückruffunktion hinzufügen. Zum Beispielconfig/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); ?>";
});
}
];
Verwendung von Blade-Komponenten
Hinweis
Erfordert webman/blade>=1.5.2
Angenommen, wir müssen ein Alert-Komponente hinzufügen
Neue Datei 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();
}
}
Neue Datei app/view/components/alert.blade.php
<div>
<b style="color: red">Hallo Blade-Komponente</b>
</div>
/config/view.php ähnlich wie der folgende Code
<?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, und die Verwendung im Template sieht ähnlich wie folgt aus
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
<x-alert/>
</body>
</html>
Erweiterung von think-template
think-template verwendet view.options.taglib_pre_load, um Tag-Bibliotheken zu erweitern, zum Beispiel
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class,
'options' => [
'taglib_pre_load' => your\namspace\Taglib::class,
]
];
Weitere Details finden Sie unter think-template标签扩展