ভিউ
webman ডিফল্টভাবে php-এর মূল সিনট্যাক্স মডেল হিসেবে ব্যবহার করে, যা opcache
চালু করার পর সেরা পারফরম্যান্স প্রদান করে। php এর মূল মডেলের পাশাপাশি, webman আরও প্রদান করে Twig, Blade, think-template মডেল ইঞ্জিন।
opcache চালু করা
ভিউ ব্যবহার করার সময়, strongly建议开启 php.ini
এর opcache.enable
এবং opcache.enable_cli
দুইটি অপশন, যাতে মডেল ইঞ্জিন সেরা পারফরম্যান্স প্রদর্শন করতে পারে।
Twig ইনস্টল করা
- Composer দ্বারা ইনস্টল
composer require twig/twig
- কনফিগারেশন পরিবর্তন করুন
config/view.php
এ<?php use support\view\Twig;
return [
'handler' => Twig::class
];
> **提示**
> অন্যান্য কনফিগারেশন অপশন `options` মাধ্যমে পাঠানো যেতে পারে, যেমন
```php
return [
'handler' => Twig::class,
'options' => [
'debug' => false,
'charset' => 'utf-8'
]
];
Blade ইনস্টল করা
- Composer দ্বারা ইনস্টল
composer require psr/container ^1.1.1 webman/blade
- কনফিগারেশন পরিবর্তন করুন
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
<?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('মডেল নাম',[]);
কল করে, ভিউ ফাইলগুলি নিম্নলিখিত নিয়ম অনুসারে অনুসন্ধান করা হয়:
/
দিয়ে শুরু হলে সরাসরি সেই পথ ব্যবহার করে ভিউ ফাইল খুঁজবে/
সহ শুরু না হলে এবং একাধিক অ্যাপ নয়, তখনapp/view/
এর অধীনে সংশ্লিষ্ট ভিউ ফাইল ব্যবহার করা হবে/
সহ শুরু না হলে এবং একাধিক অ্যাপ হলে,app/অ্যাপ নাম/view/
এর অধীনে সংশ্লিষ্ট ভিউ ফাইল ব্যবহার করা হবে- যদি মডেল প্যারামিটার প্রদান না করা হয়, তখন 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 ট্যাগ সম্প্রসারণ পর্যালোচনা করুন