दृष्टि

webman डिफ़ॉल्ट रूप से PHP की मूल भाषा का उपयोग करता है, जो opcache खोले जाने पर सर्वोत्तम प्रदर्शन प्रदान करता है। PHP की मूल टेम्पलेट के अलावा, webmanTwig,Blade, और think-template टेम्पलेट इंजन भी प्रदान करता है।

opcache चालू करें

दृष्टि का उपयोग करते समय, php.ini में opcache.enable और opcache.enable_cli विकल्पों को चालू करने की सिफारिश की जाती है, ताकि टेम्पलेट इंजन सर्वोत्तम प्रदर्शन प्राप्त कर सके।

Twig स्थापित करें

1、composer के माध्यम से स्थापना

composer require twig/twig

2、कॉन्फ़िगरेशन config/view.php को इस प्रकार बदलें

<?php
use support\view\Twig;

return [
    'handler' => Twig::class
];

सूचना
अन्य कॉन्फ़िगरेशन विकल्पों को options के माध्यम से प्रदान किया जा सकता है, जैसे

return [
    'handler' => Twig::class,
    'options' => [
        'debug' => false,
        'charset' => 'utf-8'
    ]
];

Blade स्थापित करें

1、composer के माध्यम से स्थापना

composer require psr/container ^1.1.1 webman/blade

2、कॉन्फ़िगरेशन config/view.php को इस प्रकार बदलें

<?php
use support\view\Blade;

return [
    'handler' => Blade::class
];

think-template स्थापित करें

1、composer के माध्यम से स्थापना

composer require topthink/think-template

2、कॉन्फ़िगरेशन config/view.php को इस प्रकार बदलें

<?php
use support\view\ThinkPHP;

return [
    'handler' => ThinkPHP::class,
];

सूचना
अन्य कॉन्फ़िगरेशन विकल्पों को options के माध्यम से प्रदान किया जा सकता है, जैसे

return [
    'handler' => ThinkPHP::class,
    'options' => [
        'view_suffix' => 'html',
        'tpl_begin' => '{',
        'tpl_end' => '}'
    ]
];

मूल PHP टेम्पलेट इंजन उदाहरण

फाइल app/controller/UserController.php बनाएं जैसे

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        return view('user/hello', ['name' => 'webman']);
    }
}

नया फ़ाइल app/view/user/hello.html बनाएं जैसे

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>webman</title>
</head>
<body>
hello <?=htmlspecialchars($name)?>
</body>
</html>

Twig टेम्पलेट इंजन उदाहरण

कॉन्फ़िगरेशन config/view.php को इस प्रकार बदलें

<?php
use support\view\Twig;

return [
    'handler' => Twig::class
];

app/controller/UserController.php जैसे

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        return view('user/hello', ['name' => 'webman']);
    }
}

फाइल app/view/user/hello.html इस प्रकार

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>webman</title>
</head>
<body>
hello {{name}}
</body>
</html>

अधिक दस्तावेज़ के लिए देखें Twig

Blade टेम्पलेट का उदाहरण

कॉन्फ़िगरेशन config/view.php को इस प्रकार बदलें

<?php
use support\view\Blade;

return [
    'handler' => Blade::class
];

app/controller/UserController.php जैसे

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        return view('user/hello', ['name' => 'webman']);
    }
}

फाइल app/view/user/hello.blade.php जैसे

ध्यान दें कि Blade टेम्पलेट एक्सटेंशन .blade.php है

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>webman</title>
</head>
<body>
hello {{$name}}
</body>
</html>

अधिक दस्तावेज़ के लिए देखें Blade

ThinkPHP टेम्पलेट का उदाहरण

कॉन्फ़िगरेशन config/view.php को इस प्रकार बदलें

<?php
use support\view\ThinkPHP;

return [
    'handler' => ThinkPHP::class
];

app/controller/UserController.php जैसे

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        return view('user/hello', ['name' => 'webman']);
    }
}

फाइल app/view/user/hello.html जैसे

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>webman</title>
</head>
<body>
hello {$name}
</body>
</html>

अधिक दस्तावेज़ के लिए देखें think-template

टेम्पलेट असाइनमेंट

हम टेम्पलेट को मान सौंपने के लिए view(टेम्पलेट, वैरिएबल एरे) का उपयोग करने के अलावा, हम किसी भी स्थान पर View::assign() को कॉल करके भी टेम्पलेट को मान सौंप सकते हैं। उदाहरण के लिए:

<?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() कुछ परिस्थितियों में बहुत उपयोगी है, जैसे यदि किसी सिस्टम के प्रत्येक पृष्ठ के शीर्ष पर वर्तमान लॉगिन उपयोगकर्ता की जानकारी प्रदर्शित करने की आवश्यकता है, तो हर पृष्ठ पर इस जानकारी को view('टेम्पलेट', ['user_info' => 'उपयोगकर्ता जानकारी']); के माध्यम से असाइन करना बहुत कठिन होगा। समाधान यह है कि मिडलवेयर में उपयोगकर्ता जानकारी प्राप्त करें, फिर View::assign() के माध्यम से उपयोगकर्ता जानकारी को टेम्पलेट को असाइन करें।

दृष्टि फ़ाइल पथ के बारे में

नियंत्रणकर्ता

जब नियंत्रणकर्ता view('टेम्पलेट नाम',[]); को कॉल करता है, तो दृष्टि फ़ाइल निम्नलिखित नियमों के अनुसार खोजी जाती है:

  1. यदि / से शुरू होता है, तो सीधे उस पथ का उपयोग कर दृष्टि फ़ाइल खोजें।
  2. यदि / से शुरू नहीं होता है और बहु अनुप्रयोग नहीं हैं, तो app/view/ में संबंधित दृष्टि फ़ाइल का उपयोग करें।
  3. यदि / से शुरू नहीं होता है और बहु अनुप्रयोग है, तो app/अनुप्रयोग नाम/view/ में संबंधित दृष्टि फ़ाइल का उपयोग करें।
  4. यदि टेम्पलेट पैरामीटर नहीं दिया गया है, तो स्वतः 2 और 3 नियमों के अनुसार टेम्पलेट फ़ाइल खोजें।

उदाहरण:

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        // समकक्ष return view('user/hello', ['name' => 'webman']);
        // समकक्ष return view('/app/view/user/hello', ['name' => 'webman']);
        return view(['name' => 'webman']);
    }
}

क्लोजर फ़ंक्शन

क्लोजर फ़ंक्शन $request->app खाली है, कोई अनुप्रयोग नहीं है, इसलिए क्लोजर फ़ंक्शन app/view/ में दृष्टि फ़ाइल का उपयोग करता है, उदाहरण के लिए config/route.php में परिभाषित रूट

Route::any('/admin/user/get', function (Reqeust $reqeust) {
    return view('user', []);
});

app/view/user.html को टेम्पलेट फ़ाइल के रूप में उपयोग किया जाएगा (जब blade टेम्पलेट का उपयोग किया जाता है तो टेम्पलेट फ़ाइल app/view/user.blade.php होगी)।

निर्दिष्ट अनुप्रयोग

बहु अनुप्रयोग मोड में टेम्पलेट को पुन: उपयोग करने के लिए, view($template, $data, $app = null) तीसरे पैरामीटर $app को प्रदान करता है, जिसका उपयोग यह निर्दिष्ट करने के लिए किया जा सकता है कि कौन सा अनुप्रयोग निर्देशिका का टेम्पलेट उपयोग करना है। उदाहरण के लिए view('user', [], 'admin'); app/admin/view/ में दृष्टि फ़ाइल का मजबूरन उपयोग करेगा।

टेम्पलेट पैरामीटर छोड़ें

क्लास के नियंत्रक में टेम्पलेट पैरामीटर को छोड़ना संभव है, उदाहरण के लिए

<?php
namespace app\controller;

use support\Request;

class UserController
{
    public function hello(Request $request)
    {
        // समकक्ष return view('user/hello', ['name' => 'webman']);
        // समकक्ष return view('/app/view/user/hello', ['name' => 'webman']);
        return view(['name' => 'webman']);
    }
}

twig का विस्तार

हम कॉन्फ़िगरेशन view.extension के लिए एक कोल्बैक देकर twig दृष्टि उदाहरण का विस्तार कर सकते हैं, जैसे कि config/view.php निम्नलिखित है

<?php
use support\view\Twig;
return [
    'handler' => Twig::class,
    'extension' => function (\Twig\Environment $twig) {
        $twig->addExtension(new your\namespace\YourExtension()); // एक्सटेंशन जोड़ें
        $twig->addFilter(new \Twig\TwigFilter('rot13', 'str_rot13')); // फ़िल्टर जोड़ें
        $twig->addFunction(new \Twig\TwigFunction('function_name', function () {})); // फ़ंक्शन जोड़ें
    }
];

blade का विस्तार

इसी तरह, हम कॉन्फ़िगरेशन view.extension के लिए एक कोल्बैक प्रदान करके blade दृष्टि उदाहरण का विस्तार कर सकते हैं, जैसे कि config/view.php निम्नलिखित है

<?php
use support\view\Blade;
return [
    'handler' => Blade::class,
    'extension' => function (Jenssegers\Blade\Blade $blade) {
        // blade में निर्देश जोड़ें
        $blade->directive('mydate', function ($timestamp) {
            return "<?php echo date('Y-m-d H:i:s', $timestamp); ?>";
        });
    }
];

blade का उपयोग करके घटक बनाना

मान लीजिए कि एक Alert घटक जोड़ने की आवश्यकता है

नया फ़ाइल 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();
    }
}

नया फ़ाइल app/view/components/alert.blade.php

<div>
    <b style="color: red">hello blade component</b>
</div>

/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);
    }
];

इस प्रकार, Blade घटक Alert स्थापित किया गया, टेम्पलेट में उपयोग करते समय कुछ ऐसा होगा

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>webman</title>
</head>
<body>

<x-alert/>

</body>
</html>

think-template का विस्तार

think-template टेम्पलेट लाइब्रेरी का विस्तार करने के लिए view.options.taglib_pre_load का उपयोग करता है, जैसे

<?php
use support\view\ThinkPHP;
return [
    'handler' => ThinkPHP::class,
    'options' => [
        'taglib_pre_load' => your\namspace\Taglib::class,
    ]
];

विस्तृत जानकारी के लिए think-template टैग विस्तार देखें।