รบกวนสอบถามครับ พอดีได้ติดตั้งธีมใหม่(Adminlte) คราวนี้ต้องการแสดงชื่อของผู้ที่ทำการล็อกอินเข้ามาในระบบ และรูปภาพตามที่ผู้ใช้ได้ลงทะเบียนมา ไม่ทราบว่าต้องเขียนโค๊ดอย่างไรครับ
อาจารย์ครับ ผมติดปัญหาอีกแล้วครับ พอดีผมสร้างตารางขึ้นมาใหม่ใช้ชื่อ ว่า Profile ข้างในก็จะมีรายละเอียดของบุคคล
แต่พอตอนที่ User Login เข้ามาผมใช้ให้มันแสดง ชื่อ(firstname) นามสกุล(lastname) จากตารางนี้ แต่พอใช้คำสั่งนี้ <?=Yii::$app->user->identity->profile->firstname?>
ระบบฟ้องว่า
Unknown Property – yii\base\UnknownPropertyException
Getting unknown property: app\models\User::profile
ผมต้องแก้อย่างไร รบกวนอาจารย์ช่วยชี้แนะด้วยครับ
อาจารย์ครับ ผมมี 3 คำถามที่จะถามอาจารย์และให้อาจารย์ช่วยชี้แนะด้วยครับ
1. ผมได้ดูวีดีแล้วหัดทำตามอาจารย์ในส่วนของการแสดงรูปภาพในการดูโปรไฟล์ของแต่ละ User ปัญหา คือ เวลาที่ผมทำการแก้ไขหรือเปลี่ยนรูปภาพ แต่ภาพไม่เปลี่ยนตามด้วยยังแสดงที่ภาพเดิมอยู่ครับ ภาพไม่เปลี่ยน และเวลาแก้ไขภาพจะถูกเก็บอยู่ที่ด้านนอกโฟลเดอร์ที่ถูกกำหนดไว้ผมต้องแก้อย่างไรครับ (ภาพตัวอย่างตามลิงค์ด้านล่างครับ)
http://picture.in.th/id/80d7e740b4fcdff8ed0f1063c1151d30
http://picture.in.th/id/7fe0e0ccdfacb72b8b11cb4135acad59
และนี่คือ โค๊ดการแก้ไขข้อมูลครับ ผมผิดตรงไหนรบกวนอาจารย์ช่วยชี้แนะด้วยครับ
public function actionUpdate($id)
{
$model = $this->findModel($id);
$user = $model->user;
$oldpass = $user->password_hash;
if ($model->load(Yii::$app->request->post()) && $user->load(Yii::$app->request->post())) {
if ($oldpass!=$user->password_hash){
$user->password_hash = Yii::$app->security->generatePasswordHash($user->password_hash);
}
if($user->save()){
$file = UploadedFile::getInstance($model, 'profile_img');
if(isset($file->size)&& $file->size!==0){
$file->saveAs('uploads/profile'.$user->id.'.'.$file->extension);
}
$model->save();
}
return $this->redirect(['view', 'id' => $model->user_id]);
} else {
return $this->render('update', [
'model' => $model,
'user' => $user,
]);
}
}
2. ถ้าผมต้องการที่จะให้ภาพของ User ที่ Login เข้ามาแล้วแสดงผมต้องเขียนโค๊ดกำหนดอย่างไร ดังลิงค์ภาพด้านล่างครับ
http://picture.in.th/id/7012367e6220aa1f96890dc5604815dc
3. ในโปรเจคงานของผมถ้าต้องการจะให้ User ต้อง Login เข้าระบบก่อนถึงจะเข้าหน้าเว็บไซต์นี้ได้ คือเป็นการ Redirect ไปที่หน้า Login เลยอ่ะครับผมต้องเขียนโค๊ดอย่างไร
************** 3 ข้อนี้ รบกวนอาจารย์ช่วยชี้แนะด้วยนะครับ ขอบพระคุณอย่างมาก*****************
ข้อ 1 ต้องกำหนด Path ตอน save ภาพให้ถูกต้อง แนะนำ
//...
$filename = Yii::$app->user->getId().'.'.$file->extension;
$file->saveAs(Yii::getAlias('@web').'/uploads/profile/'.$filename);
$user->photo = $filename; //เก็บชื่อไฟล์
$user->save();
//...
ข้อ 2 ใช้การระบุ Path ให้ถูกต้องครับ
<?=Html::img(Yii::getAlias('@web').'/uploads/profile/'.Yii::$app->user->identity->photo);?>
ข้อ 3 กำหนด Access Control Filter ใน Controller โดยเพิ่ม behaviors() key access โดยเรียกใช้ AccessControl
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout', 'index', 'feedback', 'my-feedback'], //กำหนด action ที่ต้องการ กำหนด ACF
'rules' => [
[
'actions' => ['logout', 'index', 'feedback', 'my-feedback'],//Action ที่ต้อง login
'allow' => true,
'roles' => ['@'], //สิทธิ์ต้อง login ก่อน
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
เพิ่มโค๊ดไปแล้วครับในส่วนของการแก้ไขรูปภาพ แต่ระบบฟ้องว่า
PHP Warning – yii\base\ErrorException
move_uploaded_file(/checkgrade/web/uploads/profile/1.png): failed to open stream: No such file or directory
ผมต้องแก้อย่างไรครับ
http://picture.in.th/id/9f4a8afada8fadd23f66bad4e5435925
http://picture.in.th/id/efed680e9f7614a87d785ad8a19455b0
http://picture.in.th/id/388e0f59f2090d53df998aeda5f1d300
และนี่คือโค๊ดการแก้ไขครับ
public function actionUpdate($id)
{
$model = $this->findModel($id);
$user = $model->user;
$oldpass = $user->password_hash;
if ($model->load(Yii::$app->request->post()) && $user->load(Yii::$app->request->post())) {
if ($oldpass!=$user->password_hash){
$user->password_hash = Yii::$app->security->generatePasswordHash($user->password_hash);
}
if($user->save()){
$file = UploadedFile::getInstance($model, 'profile_img');
if(isset($file->size)&& $file->size!==0){
$filename = Yii::$app->user->getId().'.'.$file->extension;
$file->saveAs(Yii::getAlias('@webroot').'/uploads/profile/'.$filename);
$model->photo = $filename; //เก็บชื่อไฟล์
}
$model->save();
}
return $this->redirect(['view', 'id' => $model->user_id]);
} else {
return $this->render('update', [
'model' => $model,
'user' => $user,
]);
}
}
คำถามคือรูปมันเปลี่ยนเป็นรูปใหม่หรือยังครับ ถ้าเปลี่ยนแล้วก็ OK ล่ะครับ และในฐานข้อมูลเป็นรูปใหม่ไหมครับ
ในกรณีนี้คือนามสกุลมันคนละนามสกุลกันครับ ถ้าจะใช้แทนที่ต้องเขียนโปรแกรมลบรูปเก่าก่อนครับ เพราะบางครั้งนามสกุลมันคนละนามสกุลกัน
unlink(Yii::getAlias('@webroot').'/uploads/profile/'.$model->photo);
$file->saveAs(Yii......
อาจารย์ครับ error แบบนี้แก้ตรงไหนครับ
Unknown Property – yii\base\UnknownPropertyException
Setting unknown property: dektrium\user\Module::enableUnconfimedLogin
ตอบ/อธิบาย