Görünümler
webman, varsayılan olarak şablon olarak PHP'nin yerel sözdizimini kullanır ve opcache
açıldığında en iyi performansı gösterir. PHP'nin yerel şablonunun yanı sıra, webman ayrıca Twig, Blade ve think-template şablon motorlarını da sunar.
opcache'i etkinleştirme
Görünümler kullanılırken, şablon motorunun en iyi performansı göstermesi için php.ini'deki opcache.enable
ve opcache.enable_cli
seçeneklerinin etkinleştirilmesi şiddetle önerilir.
Twig'in kurulumu
- composer ile kurulum
composer require twig/twig
config/view.php
yapılandırmasını aşağıdaki gibi değiştirin<?php use support\view\Twig;
return [
'handler' => Twig::class
];
> **Öneri**
> Diğer yapılandırma seçeneklerini `options` aracılığıyla geçebilirsiniz, örneğin:
```php
return [
'handler' => Twig::class,
'options' => [
'debug' => false,
'charset' => 'utf-8'
]
];
Blade'in kurulumu
- composer ile kurulum
composer require psr/container ^1.1.1 webman/blade
config/view.php
yapılandırmasını aşağıdaki gibi değiştirin<?php use support\view\Blade;
return [
'handler' => Blade::class
];
## think-template'in kurulumu
1. composer ile kurulum
`composer require topthink/think-template`
2. `config/view.php` yapılandırmasını aşağıdaki gibi değiştirin
```php
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class,
];
Öneri
Diğer yapılandırma seçeneklerinioptions
aracılığıyla geçebilirsiniz, örneğin:
return [
'handler' => ThinkPHP::class,
'options' => [
'view_suffix' => 'html',
'tpl_begin' => '{',
'tpl_end' => '}'
]
];
Yerel PHP şablon motoru örneği
Aşağıdaki gibi bir dosya oluşturun app/controller/UserController.php
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
return view('user/hello', ['name' => 'webman']);
}
}
Yeni bir dosya oluşturun app/view/user/hello.html
aşağıdaki gibi
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello <?=htmlspecialchars($name)?>
</body>
</html>
Twig şablon motoru örneği
config/view.php
yapılandırmasını aşağıdaki gibi değiştirin
<?php
use support\view\Twig;
return [
'handler' => Twig::class
];
app/controller/UserController.php
aşağıdaki gibi
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
return view('user/hello', ['name' => 'webman']);
}
}
Dosya app/view/user/hello.html
aşağıdaki gibi
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {{name}}
</body>
</html>
Daha fazla belge için Twig bağlantısına bakabilirsiniz.
Blade şablonunun örneği
config/view.php
yapılandırmasını aşağıdaki gibi değiştirin
<?php
use support\view\Blade;
return [
'handler' => Blade::class
];
app/controller/UserController.php
aşağıdaki gibi
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
return view('user/hello', ['name' => 'webman']);
}
}
Dosya app/view/user/hello.blade.php
aşağıdaki gibi
Not: Blade şablonunun uzantısı
.blade.php
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {{$name}}
</body>
</html>
Daha fazla belge için Blade bağlantısına bakabilirsiniz.
ThinkPHP şablonunun örneği
config/view.php
yapılandırmasını aşağıdaki gibi değiştirin
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class
];
app/controller/UserController.php
aşağıdaki gibi
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
return view('user/hello', ['name' => 'webman']);
}
}
Dosya app/view/user/hello.html
aşağıdaki gibi
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
hello {$name}
</body>
</html>
Daha fazla belge için think-template bağlantısına bakabilirsiniz.
Şablon atama
view(şablon, değişken dizisi)
ile şablona değer atamanın yanı sıra, View::assign()
çağrısını kullanarak istediğiniz yerde de şablona değer atayabiliriz. Örneğin:
<?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()
belirli senaryolar için oldukça kullanışlıdır; örneğin, bir sistemin her sayfasında mevcut oturum açan kişinin bilgilerini göstermek gerekiyorsa, her sayfada bu bilgiyi view('şablon', ['user_info' => 'Kullanıcı Bilgisi']);
ile atamak oldukça zorlayıcı olacaktır. Çözüm olarak, ara katmanda kullanıcı bilgilerini alın ve ardından View::assign()
ile şablona atayın.
Görüntü dosyası yolları hakkında
Kontrolör
Kontrolör view('şablon_adı',[]);
çağrıldığında, görüntü dosyaları aşağıdaki kurallara göre aranır:
/
ile başlıyorsa doğrudan o yolu kullanarak görüntü dosyası aranır./
ile başlamıyorsa ve çoklu uygulama değilse,app/view/
altında ilgili görüntü dosyası kullanılır./
ile başlamıyorsa ve çoklu uygulama ise,app/uygulama_adı/view/
altında ilgili görüntü dosyası kullanılır.- Şablon parametresi belirtilmezse, 2 ve 3. kurallara göre otomatik olarak şablon dosyası aranır.
Örnek:
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
// eşdeğer return view('user/hello', ['name' => 'webman']);
// eşdeğer return view('/app/view/user/hello', ['name' => 'webman']);
return view(['name' => 'webman']);
}
}
Kapatma fonksiyonu
Kapatma fonksiyonu $request->app
boş olduğu için herhangi bir uygulamaya ait değildir, bu nedenle kapanış fonksiyonu app/view/
altındaki görüntü dosyalarını kullanır. Örneğin, config/route.php
içinde yol tanımlandığında
Route::any('/admin/user/get', function (Reqeust $reqeust) {
return view('user', []);
});
bu kod app/view/user.html
dosyasını şablon dosyası olarak kullanacaktır (blade şablonu kullanıldığında şablon dosyası app/view/user.blade.php
olacaktır).
Belirli bir uygulamayı belirtme
Çoklu uygulama modunda şablonların yeniden kullanılabilmesi için, view($template, $data, $app = null)
üçüncü parametre olarak $app
sağlar. Bu parametre, hangi uygulama dizinindeki şablonu kullanmak istediğinizi belirtmek için kullanılabilir. Örneğin, view('user', [], 'admin');
app/admin/view/
altındaki görüntü dosyasını zorunlu olarak kullanır.
Şablon parametresini atlama
Sınıf kontrolöründe şablon parametresini atlayabilirsiniz, örneğin:
<?php
namespace app\controller;
use support\Request;
class UserController
{
public function hello(Request $request)
{
// eşdeğer return view('user/hello', ['name' => 'webman']);
// eşdeğer return view('/app/view/user/hello', ['name' => 'webman']);
return view(['name' => 'webman']);
}
}
Twig'i genişletme
Aşağıdaki gibi view.extension
yapılandırmasını kullanarak Twig görünüm örneğini genişletebiliriz, örneğin config/view.php
aşağıdaki gibi olabilir:
<?php
use support\view\Twig;
return [
'handler' => Twig::class,
'extension' => function (\Twig\Environment $twig) {
$twig->addExtension(new your\namespace\YourExtension()); // Ek Extension ekleme
$twig->addFilter(new \Twig\TwigFilter('rot13', 'str_rot13')); // Ek Filter ekleme
$twig->addFunction(new \Twig\TwigFunction('function_name', function () {})); // Fonksiyon ekleme
}
];
Blade'i genişletme
Aynı şekilde yapılandırmaya view.extension
geri çağrısı ekleyerek Blade görünüm örneğini genişletebiliriz, örneğin config/view.php
aşağıdaki gibi olabilir:
<?php
use support\view\Blade;
return [
'handler' => Blade::class,
'extension' => function (Jenssegers\Blade\Blade $blade) {
// Blade'e komut ekleme
$blade->directive('mydate', function ($timestamp) {
return "<?php echo date('Y-m-d H:i:s', $timestamp); ?>";
});
}
];
Blade bileşenlerini kullanma
Bir Alert bileşeni eklemek istediğimizi varsayalım.
Yeni app/view/components/Alert.php
oluşturun
<?php
namespace app\view\components;
use Illuminate\View\Component;
class Alert extends Component
{
public function __construct()
{
}
public function render()
{
return view('components/alert')->rawBody();
}
}
Yeni app/view/components/alert.blade.php
oluşturun
<div>
<b style="color: red">hello blade component</b>
</div>
/config/view.php
aşağıdaki gibi bir kod içermelidir
<?php
use support\view\Blade;
return [
'handler' => Blade::class,
'extension' => function (Jenssegers\Blade\Blade $blade) {
$blade->component('alert', app\view\components\Alert::class);
}
];
Böylece, Blade bileşeni Alert ayarlandı ve şablonda kullanım şekli aşağıdaki gibi olabilir:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>webman</title>
</head>
<body>
<x-alert/>
</body>
</html>
think-template'i genişletme
think-template, etiket kütüphanelerini genişletmek için view.options.taglib_pre_load
kullanır, örneğin:
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class,
'options' => [
'taglib_pre_load' => your\namspace\Taglib::class,
]
];
Detaylar için think-template etiket genişletmesi bağlantısına bakabilirsiniz.