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

  1. composer ile kurulum

composer require twig/twig

  1. 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

  1. composer ile kurulum
composer require psr/container ^1.1.1 webman/blade
  1. 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çeneklerini options 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:

  1. / ile başlıyorsa doğrudan o yolu kullanarak görüntü dosyası aranır.
  2. / ile başlamıyorsa ve çoklu uygulama değilse, app/view/ altında ilgili görüntü dosyası kullanılır.
  3. / ile başlamıyorsa ve çoklu uygulama ise, app/uygulama_adı/view/ altında ilgili görüntü dosyası kullanılır.
  4. Ş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.