A View class for php views. It includes the core features of a conventional view library, but is light weight and uses pure php syntax, no compiling and no need to learn a new syntax.
Download and unzip in your project directory.
Or install into a composer project using
composer require lydore/view
<?php
require_once 'path/to/View.php';
// Set directory containing all views
View::setBaseDir('path/to/views/dir');
All view files should be saved as file-name.view.php in the base view directory e.g homepage.view.php A view can contain regular html
<!DOCTYPE html>
<html>
<head>
<title>View</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
In addition, views can have sections, vars and can be extended or yielded. The following example shows this functionality.
template.view.php is a master template view which home.view.php and about.view.php extend to use as their layout
<!DOCTYPE html>
<html>
<head>
<title><?= View::get('page_title') ?></title>
</head>
<body>
<?php View::yield('content') ?>
</body>
</html>
<?php View::set('page_title', 'View Home') ?>
<?php View::section('content') ?>
<h1>Hello World</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
<?php View::endsection() ?>
<?php View::extend('template') ?>
<?php View::set('page_title', 'About View') ?>
<?php View::section('content') ?>
<h1>About Us</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
<?php View::endsection() ?>
<?php View::extend('template') ?>
Now the view has been defined, next is to call the view from our code. To do that, use:
<?php
View::render('home');
Variables can also be passed to the view by passing an associative array to the view method
<?php
$name = 'John Doe';
View::render('home', ['name' => $name]);
// OR use the compact method
View::render('home', compact('name'));
Views can be included in other views by using the include method in the view
<div>
<?php View::include('side-bar') ?>
</div>
You may need a particluar set of data to be available to a view anytime the view is called, this can be done with the bindData method, however the method call needs to be placed such that it runs before the view is requested.
<?php
View::bindData('home', function (){
// compact method can also be used
$name = 'Jane Doe';
return [
'site_name' => 'My site',
'body' => 'Cotent in my site body',
'name' => $name
];
});
In the above example, the variables $site_name, $body and $name would always be available in the home.view.php file
It is possible to place views in sub directories of the view base directory, for instance if there is a directory layouts in the base directory and it has a view master.view.php, it can be accessed this way
<?php
View::render('layouts/master');
To prevent html injection, values to be displayed in the view can be escaped using the e method
<div><?= View::e($_GET['user']) ?></div>