ভিউ
webman ডিফল্টভাবে টেমপ্লেট হিসেবে php কোড ব্যবহার করে এবং opcache
চালু করা হলে সে সেরা কার্যক্ষমতা দেয়। php এর মূল টেমপ্লেট বাদে, webman এ Twig , Blade , think-template টেমপ্লেট ইঞ্জিন প্রদান করে।
opcache চালু করুন
ভিউ ব্যবহার করার সময়, টেমপ্লেট ইঞ্জিনের জন্য সেরা কার্যক্ষমতা পেতে প্রশাসকের জন্য প্রধানত প্রস্তাবিত করা হয় opcache.enable
এবং opcache.enable_cli
নমুনা দুটি বিকল্প।
Twig ইনস্টলেশন
- কম্পোজার ইনস্টলেশন
composer require twig/twig
config/view.php
কনফিগারেশন পরিবর্তন করুন
<?php
use support\view\Twig;
return [
'handler' => Twig::class
];
পরামর্শ
অন্যান্য কনফিগারেশন বিকল্পগুলি অপশনস দিয়ে পাস করা যায়, উদাহরণ স্বরূপ
return [
'handler' => Twig::class,
'options' => [
'debug' => false,
'charset' => 'utf-8'
]
];
ব্লেডে ইনস্টলেশন
- কম্পোজার ইনস্টলেশন
composer require psr/container ^1.1.1 webman/blade
- কনফিগারেশন পরিবর্তন
config/view.php
কনফিগারেশন পরিবর্তন করুন
<?php
use support\view\Blade;
return [
'handler' => Blade::class
];
think-template ইনস্টলেশন
- কম্পোজার ইনস্টলেশন
composer require topthink/think-template
- কনফিগারেশন পরিবর্তন
config/view.php
কনফিগারেশন পরিবর্তন করুন
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class,
];
পরামর্শ
অন্যান্য কনফিগারেশন বিকল্পগুলি অপশনস দিয়ে পাস করা যায়, উদাহরণ স্বরূপ
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.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('মডেলনাম',[]);
দিলে, ভিউ ফাইল নিয়ে নিতে নিম্নলিখিত নির্দেশিকা অনুসরণ করে:
- একাধিক অ্যাপ্লিকেশন না থাকলে,
app/view/
এর অধীনে মডেল ফাইল চালাবে - বহূপরিকল্পনা যখন থাকবে,
app/অ্যাপ্লিকেশননাম/view/
এর অধীনে মডেল ফাইল চালাবে
সংক্ষেপে বলা যায় যে, যদি $request->app
ফাঁকা থাকে, তবে app/view/
এর অধীনে ভিউ ফাইল ব্যবহার হবে, অন্যথায় app/{$request->app}/view/
এর অধীনে ভিউ ফাইল ব্যবহার হবে।
ক্লোজার ফাংশন
ক্লোজার ফাংশনে $request->app
ফাঁকা থাকে, ব্যবহারকারীর কোনো অ্যাপ্লিকেশনের অংশ নয়, এর ফলে ক্লোজার ফাংশন ব্যবহার করে app/view/
এর ভিউ ফাইল ব্যবহার হবে, উদাহরণ সরব এমনকি রুট ফাইলো সারি ওয়ার্ব ডেফাইন রুট,
Route::any('/admin/user/get', function (Reqeust $reqeust) {
return view('user', []);
});
``` ভিউ নিয়ে `app/view/user.html` ফাইলটি মডেল হিসাবে ব্যবহার করা হয়.
#### অ্যাপ সংজ্ঞায়িত
একটি বহূপরিকল্পনা পদ্ধতির ভিউ যখন মোটাংশ ব্যবহারের জন্য পুনরাবৃত্তি করা যায়, `view($মডেলনাম, $তথ্য, $অ্যাপ = null)` তৃতীয় পরামিতি `$app` দিয়ে কোন অ্যাপ্লিকেশন ডিরেক্টরির ভিউ ফাইল ব্যবহার করার জন্য ব্যবহার করা যেতে পারে। উদাহরণ সরব `view('user', [], 'admin');` ফাঁকা করতে থাকবে `app/admin/view/` এর ভিউ ফাইল ব্যবহার করা হবে।
## twig প্রসারণ
> **নোট**
> এই বৈশিষ্ট্যটি webman-framework> = 1.4.8 প্রয়োজন
আমরা কনফিগারেশন `view.extension` এ একটি কলব্যাক দিয়ে twig ভিউ ইনস্ট্যান্স এক্সটেন্শন করার মাধ্যমে একটি twig ভিউ ইনস্ট্যান্স এক্সটেন্শন করা যেতে পারে, উদাহরণ সরব `config/view.php` নিম্নলিখিত করে:
```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 () {})); // ফং যোগ করুন
}
];
ব্লেড এক্সটেনশন
নোট
এই বৈশিষ্ট্যটি webman-framework> = 1.4.8 প্রয়োজন
একইভাবে আমরা কনফিগারেশনview.extension
এ একটি কলব্যাক দিয়ে blade ভিউ ইনস্ট্যান্স এক্সটেন্শন করার মাধ্যমে blade ভিউ ইনস্ট্যান্স এক্সটেন্শন করা যেতে পারে, উদাহরণ সরবconfig/view.php
নিম্নলিখিত করে
<?php
use support\view\Blade;
return [
'handler' => Blade::class,
'extension' => function (Jenssegers\Blade\Blade $blade) {
// ব্লেড কে অ্যাড ডায়েরেকটিভ
$blade->directive('mydate', function ($timestamp) {
return "<?php echo date('Y-m-d H:i:s', $timestamp); ?>";
});
}
];
blade ব্যবহার করা যাক
নোট
webman/blade> = 1.5.2 প্রয়োজন
যদি একটি 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`**
```html
<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
ব্যবহার করে, উদাহরণ সরব config/view.php
নিম্নলিখিত করে
<?php
use support\view\ThinkPHP;
return [
'handler' => ThinkPHP::class,
'options' => [
'taglib_pre_load' => your\namspace\Taglib::class,
]
];