Step 1: A sample controller be like
<?php
class DashboardController extends Controller
{
// این تابع در هنگام درخواست یک صفحه
// جهت نمایش، اجرا میشود.
// در این تابع، توابعی اجرا میشوند که وظیفهی
// احراز هویت، ارتباط با پایگاهداده، و پردازش خروجی
// را بر عهده دارند.
function LandingsGET()
{
// $this->Auth();
$uow = new UnitOfWork();
$rows = $uow->selectLandings();
$this->Render('Landings', [
'Title' => _AppName . ' | مدیریت صفحات فرود',
'Rows' => $rows
]);
}
// فرمی برای ورود اطلاعات لندینگ جدید یا ویرایش اطلاعات لندینگ قبلی
// نمایش داده میشود. به مدت این تابع دقت کنید که اطلاعات را به
// کاربر میفرستد. و اطلاعات فرم را دریافت نمیکند. دریافت اطلاعات
// از فرم، در هنگام کلیک بر روی دکمهی ذخیرهسازی، از تابعی با نام مشابه
// اما متد پُست استفاده میشود.
function LandingGET($id = null)
{
// $this->Auth();
if (is_null($id)) {
$this->Render('Landing', [
'Title' => _AppName . ' | صفحه فرود جدید',
]);
} else {
$uow = new UnitOfWork();
$row = $uow->selectLanding($id);
$this->Render('Landing', [
'Title' => _AppName . ' | ویرایش صفحهی فرود',
'Row' => $row
]);
}
}
// این تابع، مسول دریافت کردن اطلاعات ارسال شده در
// فرم توسط کاربر است. و سپس نسبت به موقعیت، میفهمد که
// باید آیتم جدید ایجاد کند یا قبلی را ویرایش کند.
// سپس کاربر را به صفحهی اول مدیریت این بخش بر میگرداند.
function LandingPOST($id = null)
{
$uow = new UnitOfWork();
if (isset($_POST['insert'])) {
$uow->insertLanding($_POST);
$this->RedirectResponse(_Root . 'Dashboard/Landings?msg=آیتم جدید ایجاد شد');
} else if ($_POST['update']) {
$uow->updateLanding($_POST);
$this->RedirectResponse(_Root . 'Dashboard/Landings?msg=آیتم ویرایش شد');
} else if ($_POST['delete']) {
$uow->deleteLanding($_POST);
$this->RedirectResponse(_Root . 'Dashboard/Landings?msg=آیتم حذف شد');
}
}
}
Step 2: In the UnitOfWork class we have
<?php
class UnitOfWork
{
function selectLandings() // انتخاب همه
{
$sql = <<<EOF
SELECT * FROM LANDINGS ORDER BY `Id` DESC;
EOF;
$output = [];
$ret = $this->db->query($sql);
while ($row = $ret->fetchArray(SQLITE3_ASSOC))
array_push($output, $row);
return $output;
}
function selectLanding($Id) // انتخاب یک آیتم تنها
{
$id = $this->preventInjection($Id);
$sql = <<<EOF
SELECT * FROM LANDINGS WHERE `Id`=$id LIMIT 1;
EOF;
$ret = $this->db->query($sql);
return $ret->fetchArray(SQLITE3_ASSOC);
}
function insertLanding($inputs)
{
foreach ($inputs as $key => $value)
$inputs[$key] = $this->preventInjection($value);
$title = $inputs['title'];
$excerpt = $inputs['excerpt'];
$slug = $inputs['slug'];
$innerHtml = $inputs['innerHtml'];
$sql = <<<EOF
INSERT INTO LANDINGS (Title,Excerpt,Slug,InnerHtml)
VALUES ('$title','$excerpt','$slug','$innerHtml');
EOF;
$ret = $this->db->exec($sql);
if (!$ret)
throw new Exception($this->db->lastErrorMsg());
}
function updateLanding($inputs)
{
foreach ($inputs as $key => $value)
$inputs[$key] = $this->preventInjection($value);
$id = $inputs['id'];
$title = $inputs['title'];
$excerpt = $inputs['excerpt'];
$slug = $inputs['slug'];
$innerHtml = $inputs['innerHtml'];
$sql = <<<EOF
UPDATE LANDINGS SET
Title='$title',Excerpt='$excerpt',
Slug='$slug',InnerHtml='$innerHtml'
WHERE `Id`=$id
EOF;
$ret = $this->db->exec($sql);
if (!$ret)
throw new Exception($this->db->lastErrorMsg());
}
function deleteLanding($inputs)
{
$id = $this->preventInjection($inputs['id']);
$sql = <<<EOF
DELETE FROM LANDINGS WHERE `Id`=$id
EOF;
$ret = $this->db->exec($sql);
if (!$ret)
throw new Exception($this->db->lastErrorMsg());
}
}
Step 3: And finally for the views
Item.php
<?php
if (isset($Data['Row'])) {
$u = true;
$row=$Data['Row'];
}
?>
<form method="post">
<label for="title">عنوان صفحه</label>
<input type="text" name="title" value="<?php echo $u ? $row['Title'] : '' ?>">
<label for="slug">آدرس</label>
<input type="text" name="slug" value="<?php echo $u ? $row['Slug'] : '' ?>">
<label for="excerpt">خلاصه</label>
<input type="text" name="excerpt" value="<?php echo $u ? $row['Excerpt'] : '' ?>">
<label for="innerHtml">محتوا</label>
<textarea name="innerHtml"><?php echo $u ? $row['InnerHtml'] : '' ?></textarea>
<?php if (!isset($u)) : ?>
<input type="submit" name="insert" value="ذخیره">
<?php else : ?>
<input type="hidden" name="id" value="<?php echo $u ? $row['Id'] : '' ?>">
<input type="submit" name="update" value="به روز رسانی">
<input type="submit" name="delete" value="حذف">
<?php endif; ?>
<a href="<?php echo _Root ?>Dashboard/Landings">انصراف</a>
</form>
Items.php
<?php
// دریافت اطلاعات ارسال شده از کنترلر و قراردادن آن در یک متغیر.
// اطلاعات ارسال شده از کنترلر مربوطه در متغیر $Data ذخیره میشوند
// برای دسترسی سادهتر آنرا در متغیر $rows قرار میدهیم.
$rows = $Data['Rows'];
?>
<table>
<caption style="caption-side:bottom"><a href="<?php echo _Root ?>Dashboard/Landing">صفحه جدید</a></caption>
<thead>
<tr>
<th>#</th>
<th>عنوان</th>
</tr>
</thead>
<?php foreach ($rows as $row) :
$row = [
_Root . 'Dashboard/Landing',
$row['Id'],
$row['Title']
];
echo sprintf('<tr><td><a href="%s/%d">ویرایش</a></td><td>%s</td></tr>', ...$row);
endforeach; ?>
</tbody>
<tfoot>
صفحات
</tfoot>
</table>