مشاوره رایگان
دریافت لینک های دانلود دریافت پستی درب منزل مبلغ کل: تومان
جهت دریافت کد تخفیف به کانال تلگرام مراجعه و یا با پشتیبان آنلاین هماهنگ نمایید

Data Providerها در فریمورک Yii


فریمورک Yii مجموعه ای از کلاس های data provider را فراهم کرده، که صفحه بندی (pagination) و مرتب سازی (sorting) را در یک فایل کپسوله سازی نموده است. هر data provider ی کلاس  yii\data\DataProviderInterface را پیاده سازی می کند. که از بازیابی اطلاعات مرتب شده (sorted) و صفحه بندی شده (paginated) پشتیبانی می کند. Data provider ها معمولا با داده ویجت ها، کار می کنند.

فریمورک Yii شامل -

ActiveDataProvider  - از yii\db\ActiveQuery یا yii\db\Query برای ساخت query از دیتابیس استفاده می شود.

SqlDataProvider   -  دستورات SQL را اجرا می کند و داده های برگشتی را به صورت آرایه بر می گرداند.

ArrayDataProvider - یک آرایه بزرگ را می گیرد و یک تکه از آن را برمی گرداند.

شما می تواندی رفتارهای مرتب سازی و صفحه بندی یک data provider را با تنظیم propertyهای pagination و sort، تعریف نمایید.  Data widget ها، مانند yii\grid\GridView، یک property به نام dataProvider دارند که ، که یک نمونه dataProvider را می گیرد و داده ها را روی صفحه، نمایش می دهد.

آماده سازی DB

مرحله 1 - ایجاد یک پایگاه داده جدید:  پایگاه داده را می توان به دو روش زیر ایجاد نمود:

  • در ترمینال، دستور زیر را اجرا نمایید.

mysql -u root –p

  • ایجاد یک پایگاه داده جدید از طریق دستورزیر:

  CREATE DATABASE helloworld CHARACTER SET utf8 COLLATE utf8_general_ci؛

 

مرحله 2 - connection پایگاه داده را در فایل config/db.php پیکربندی کنید. تنظیمات زیر برای سیستم مورد استفاده کنونی می باشد.

<?php
   return [
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host = localhost;dbname = helloworld',
      'username' => 'vladimir',
      'password' => '12345',
      'charset' => 'utf8',
   ];
?>

مرحله 3 - داخل دایرکتوری ریشه، دستور ./yii migrate/create test_table را اجرا کنید. این فرمان یک database migration را برای مدیریت DB ایجاد می کند. فایل migration   باید در پوشه  migrations در ریشه پروژه قرار بگیرد.

مرحله 4 - فایل migration را (m160106_163154_test_table.php در مثال ما) به صورت زیر ویرایش کنید.

<?php
   use yii\db\Schema;
   use yii\db\Migration;
   class m160106_163154_test_table extends Migration {
      public function safeUp() {
         $this->createTable("user", [
            "id" => Schema::TYPE_PK,
            "name" => Schema::TYPE_STRING,
            "email" => Schema::TYPE_STRING,
         ]);
         $this->batchInsert("user", ["name", "email"], [
            ["User1", "user1@gmail.com"],
            ["User2", "user2@gmail.com"],
            ["User3", "user3@gmail.com"],
            ["User4", "user4@gmail.com"],
            ["User5", "user5@gmail.com"],
            ["User6", "user6@gmail.com"],
            ["User7", "user7@gmail.com"],
            ["User8", "user8@gmail.com"],
            ["User9", "user9@gmail.com"],
            ["User10", "user10@gmail.com"],
            ["User11", "user11@gmail.com"],
         ]);
      }
      public function safeDown() {
         $this->dropTable('user');
      }
   }
?>

migration بالا یک جدول به نام user  با چنیین فیلدهایی ایجاد می کند: id, name, email. همچنین تعدادی user نیز به جدول مان اضافه می نماید.

مرحله 5 - داخل ریشه پروژه دستور ./yii migrate را اجرا کنید. تا migraton به Database مان اعمال شود.

مرحله 6 - حالا ما باید یک مدل برای جدول user مان ایجاد کنیم. برای سادگی کار، ما قصد داریم از ابزار تولید کد Gii استفاده کنیم.

این آدرس را باز کنید: url: http://localhost:8080/index.php?r=gii. سپس بر روی دکمه “Start” زیر هدر “Model generator” کلیک کنید. نام جدول را user و نام کلاسِ مدل را MyUser بگذارید، روی دکمه “Preview” کلیک کنید و در نهایت روی دکمه “Generate” کلیک نمایید.

مدل MyUser باید در دایرکتوری models  ظاهر شود.

Active Data Provider

مرحله 1 – یک تابع به نام actionDataProvider در داخل SiteController ایجاد نمایید.

public function actionDataProvider(){
   $query = MyUser::find();
   $provider = new ActiveDataProvider([
      'query' => $query,
      'pagination' => [
         'pageSize' => 2,
      ],
   ]);
   // returns an array of users objects
   $users = $provider->getModels();
   var_dump($users);
}

در کد بالا، یک شی از کلاس ActiveDataProvider  را تعریف می کنیم و کاربران را از صفحه اول نمایش می دهیم. کلاس yii\data\ActiveDataProvider ازکامپوننت برنامه DB به عنوان کانکشن DB استفاده می کند.

مرحله 2 - اگر آدرس http://localhost:8080/index.php?r=site/dataprovider را در local host وارد کنید، آنچه که مشاهده می نمایید مطابق با تصویر زیر می باشد.

SQL Data Provider

کلاس yii\data\SqlDataProvider با دستورات خام SQL کار می کند.

 

مرحله 1 - متد actionDataProvider را مطابق با کدهای زیر ویرایش کنید.

public function actionDataProvider() {
   $count = Yii::$app->db->createCommand('SELECT COUNT(*) FROM user')->queryScalar();
   $provider = new SqlDataProvider([
      'sql' => 'SELECT * FROM user',
      'totalCount' => $count,
      'pagination' => [
         'pageSize' => 5,
      ],
      'sort' => [
         'attributes' => [
            'id',
            'name',
            'email',
         ],
      ],
   ]);
   // returns an array of data rows
   $users = $provider->getModels();
   var_dump($users);
}

مرحله 2 - در نوار آدرس مرورگر وب تان  http://localhost:8080/index.php?r=site/data-provider را وارد کنید، خروجی زیر را مشاهده خواهید نمود.

Array Data Provider

کلاس yii\data\ArrayDataProvider بهترین کلاس برای کار با آرایه های بزرگ است. عناصر در این آرایه می توانند نتایج حاصل از جستجوی DAO یا نمونه های Active Record  باشند.

 

مرحله 1 - متد actionDataProvider را به شکل زیر تغییر دهید.

public function actionDataProvider() {
   $data = MyUser::find()->asArray()->all();
   $provider = new ArrayDataProvider([
      'allModels' => $data,
      'pagination' => [
         'pageSize' => 3,
      ],
      'sort' => [
         'attributes' => ['id', 'name'],
      ],
   ]);
   // get the rows in the currently requested page
   $users = $provider->getModels();
   var_dump($users);
}

مرحله 2 – اگر در مرورگر وب تان به آدرس http://localhost:8080/index.php?r=site/data-provider  بروید، خروجی زیر را مشاهده خواهید کرد.

توجه داشته باشید که بر خلاف SQL Data Provider و Active Data Provider، آرایه Data Provider تمام داده ها را در حافظه بارگذاری می کند، بنابراین کاربرد کمتری دارد.

فصلِ: 14 , تعداد قسمت ها: 188 , سطح: صفر تا صد

این فصل در یک نگاه:

سلام . پیشنهاد میکنم حتما دموی دوره رو مشاهده کنید درباره فریم ورک Yii: در پاسخ به سوالات : آیا این فریم ورک سریع است؟ آیا این یک فریم ورک امن است؟ آیا این یک فریم ورک حرفه ای است؟ آیا ا…
فصلِ: 8 , تعداد قسمت ها: 77 , سطح: صفر تا صد

این فصل در یک نگاه:

  پیشنهاد میکنیم دمو دوره رو حتما مشاهده کنید با سلام خدمت دوستان عزیز . ابتدا عرض کنم که این دوره برای دوستانی آماده شده که میخوان وب اپلیکیشن های مدرنی رو طراحی بکنن و وارد بازار کار ط…

تولید شده توسط کلیک سایت

پشتیبانی آنلاین
آماده پاسخگویی هستیم
انتخاب تصویر جهت ارسال:
در حال ضبط صدا

(جهت توقف و یا لغو ضبط از دکمه های زیر استفاده کنید)

توقف و ارسال :
لغو ضبط
در حال حاضر تمامی کارشناسان آفلاین هستند. همواره می توانید با شماره تلگرام / واتساپ 09010005000 به صورت آنلاین با ما در ارتباط باشید. جهت ورود به واتساپ کلیک کنید
0 پیام جدید
پشتیبان در حال تایپ ...
ارسال تصویر ضبط صدا
0 کارشناسان آنلاین می باشند
این گفت و گو توسط پشتیبان به اتمام رسید