SnowFramework CRUD: How to develop database records management from admin dashboard?

Share this post on:

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>
Share this post on:

Author: tayyebi

Tayyebi works in the role of Director at Gordarg where he is the founder. He is passionate about people, technology, and arts. Mohammad believes in communications, each of us has the power to empower their people with knowledge. He can be seen writing codes, playing music, biking, and reading.

View all posts by tayyebi >






www.Gordarg.com