قبل از هرچیزی بگم من فرض میکنم دارین با 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 دو راه داریم یا خودمون بریم یه کلاس بسازیم که راه خوبیه یا اینکه از 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 به کلاسمون اضافه کنیم به نام های زیر
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' => 'نام کاربری',
خوب دیگه خسته شدم ادامش باشه واسه پست بعدی که مدلی رو که ساختیم استفاده بشه
فعلا خدانگهدار