سیدروح الله سیدموسوی
سیدروح الله سیدموسوی
خواندن ۴ دقیقه·۶ سال پیش

فعال کردن بانک اطلاعاتی در فریمورک Yii

قبل از هرچیزی بگم من فرض میکنم دارین با Yii Advanced کار میکنید و آدرس هام رو نسبت به Advanced مینویسم

طریقه ارتباط PHP با Database خیلی راحته حالا Yii اومده همون رو هم راحت تر کرده؛برای اتصال فقط کافیه شما فایل main-local.php رو از آدرس common/config باز کنید و قسمت زیر رو اینجور که میگم تغییر بدین

'db' => [ 'class' => 'yii\db\Connection', 'dsn' => 'mysql:host=HOSTADDRESS;dbname=DBNAME', 'username' => 'USERNAME', 'password' => 'PASSWORD', 'charset' => 'utf8', 'tablePrefix' => 'PREFIX' ],

خوب همه چی معلومه شما برای آدرس هاست که معمولا localhost هست باید به جای HOSTADDRESS بنویسید نام پایگاه داده رو به جای DBNAME، نام کاربری به جای USERNAME و رمزعبور رو به جای PASSWORD بنویسید همین اگر جداولتون هم Prefix دارن که به جای PREFIX بنویسید به همین سادگی

حالا قراره یه صفحه داشته باشیم که از بانکمون داده ها رو بخونه و نشونمون بده

برای اینکار کافیه یه Model بسازیم و بعد اون رو توی Controller صدا بزینم و پاسش بدیم View آخه میدونید که فریمورک Yii از معماری MVC بهره میبره اگر هم نمی دونید MVC چی هست بعدا باید یه پست بزارم برای توضیح این ولی اگر مختصر بخوام بگم MVC مخفف Model,View,Controller هست

  • مدل یا Model برای ارتباط با دیتابیس هست و هر نوع داده که بخوایم از بانکمون بخونیم رو توسط Model انجام میدیم
  • ویو یا View معلومه از اسمش صفحاتی از سایتمون هستن که کاربران می بینن
  • کنترلر یا Controller هم میشه رابط بین Model و View که میاد چک میکنه که چه داده ای رو باید به چه View ارسال کنه یه جورایی مغز سایت هست

خوب حالا چه طور Model رو بسازیم

برای ساخت Model دو راه داریم یا خودمون بریم یه کلاس بسازیم که راه خوبیه یا اینکه از GII استفاده کنیم آره Gii یه ابزار خیلی خوب که این فریمورک برامون گذاشته تا کارمون رو سرعت ببخشیم

الان من کاری به Gii ندارم تو یه پست دیگه آموزشش رو میزارم الان بریم سراغ نوشتن به صورت دستی

اول وارد پوشه frontend/models بشین و یه فایل که همنام جدولتون هست رو بسازین مثلا اگر اسم جدولتون users هست یه فایل با نام Users بسازین آره حرف اول نام کلاس حتما باید بزرگ باشه کارهای زیر رو بکنید

اول باید namespace رو تعریف کنید

namespace app\models

بعد باید کلاس های مورد نیاز رو use کرد

use Yii

بعدش اسم کلاسمون رو مینویسیم و مشتقش (extend) مکنیم از \yii\db\ActiveRecord

class Users extends \yii\db\ActiveRecord

بعدش باید چندتا Method به کلاسمون اضافه کنیم به نام های زیر

  • tableName
  • rules
  • attributeLabels
public static function tableName() { return '{{%users}}'; }
public function rules() { return [ [['name', 'family','username','password'], 'required'], [['name'], 'string', 'max' => 255], [['username'], 'unique'], ]; } public function attributeLabels() { return [ 'id' => Yii::t('app', 'ID'), 'name' => Yii::t('app', 'Name'), 'family' => Yii::t('app', 'Family'), 'username' => Yii::t('app', 'User Name'), 'password' => Yii::t('app', 'Password'), ]; }

خوب تابع tableName اسم جدول رو برمیگردونه اینی که میبینید داخل آکولاد گذاشتتش برای اینکه اگر جول Prefix داشت به صورت خودکار Prefix رو هم اضافه کنه نگین نمیدونید Prefix چیه که میدونم میدونید ولی بازم میگم چیه دیدین بعضی بانک ها رو که باز میکنید اول اسم همه جدول ها یه چیز عجیب و غریب نوشته مثلا به جای اینکه عین آدم اسم جدول user رو بنویسه نوشته se4w_user به همین se4w_ میگن Prefix که میتونه هرچیزی باشه دلیلش هم اینه که کثی نتونه اسم جدول ها رو پیدا کنه

تابع بعدی rules هست که خودش به تنهایی یه پست میطلبه ولی به طور مختصر بگم میاد برای هر فیلد یه وضعیت مشخص میکنه مثلا تو خط اولش چی نوشتم

[['name', 'family','username','password'], 'required'],

یعنی فیلدهای name,family,username و password اجباری هستن یا خط بعدی

[['name'], 'string', 'max' => 255],

یعنی فیلد name میتونه حداکثر 255 کاراکتر داشته باشه و در آخر هم

[['username'], 'unique'],

یعنی فیلد username حتما باید یکتا باشه و نمیتونه توی این جدول تکرار بشه

حالا فکراتون رو بکنید ببینید اگر بخوایم بگیم فیلد username حداقل باید 3 و حداکثر 6 تاباشه چی باید بنویسیم خوب معلومه دیگه

[['username'], 'string', 'min' => 3], [['name'], 'string', 'max' => 6],

در آخر هم تابع attributeLabels معلوم کننده نام های فیلد هاست یعنی چی؟ یعنی وقتی دارین توی یه view از این فیلد استفاده می کنید به جای اسم اصلیش اسمی که شما میخواین رو نشون بده چه طور مثلا تو مثال زیر به جای username نام کاربری می نویسه

'username' => Yii::t('app', 'User Name'),

حالا ماجرای

Yii::t('app','UserName')

چیه رو تو یه پست جداگونه توضیح میدم فقط بدونید واسه موقع هست که سایتتون چند زبانه هست اگر هم مطمئن هستید که سایتتون تک زبونه و قرار نیست چندزبونه باشه کد زیر رو بنویسید

'username' => 'نام کاربری',

خوب دیگه خسته شدم ادامش باشه واسه پست بعدی که مدلی رو که ساختیم استفاده بشه

فعلا خدانگهدار

yiidatabasephpdb
همیشه دوست داشتم یه برنامه نویس باشم و تلاشم رو میکنم که یه روز بشم
شاید از این پست‌ها خوشتان بیاید