فعال کردن بانک اطلاعاتی در فریمورک 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\ActiveRecordclass Users extends \yii\db\ActiveRecordبعدش باید چندتا Method به کلاسمون اضافه کنیم به نام های زیرtableNamerulesattributeLabelspublic 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' => 'نام کاربری',خوب دیگه خسته شدم ادامش باشه واسه پست بعدی که مدلی رو که ساختیم استفاده بشهفعلا خدانگهدار