Rumah  >  Artikel  >  rangka kerja php  >  Cara mengubah suai avatar pengguna dalam rangka kerja ThinkPHP

Cara mengubah suai avatar pengguna dalam rangka kerja ThinkPHP

PHPz
PHPzasal
2023-04-10 09:03:53736semak imbas

ThinkPHP ialah rangka kerja PHP yang sangat popular di pasaran domestik Banyak pembangun dan syarikat menggunakannya untuk membangunkan pelbagai aplikasi web. Antaranya, avatar pengguna merupakan salah satu fungsi yang paling biasa dalam aplikasi web Oleh itu, artikel ini akan memperkenalkan cara melaksanakan fungsi mengubah suai avatar pengguna dalam rangka kerja ThinkPHP.

1. Analisis keperluan

Sebelum mula menulis kod, kami perlu menjelaskan terlebih dahulu keperluan, termasuk:

1. Pengguna boleh memuat naik avatar semasa mendaftar dan menyimpan avatar ke Pelayan setempat;

2. Selepas log masuk, pengguna boleh mengubah suai avatar mereka dan menyimpan avatar yang diubah suai ke pelayan tempatan.

Memandangkan keperluan di atas, perkara berikut akan dibahagikan kepada dua bahagian untuk diterangkan secara terperinci.

2. Muat naik avatar

1 Buat jadual pangkalan data

Untuk kemudahan, kami boleh membuat jadual pengguna untuk menyimpan maklumat pengguna adalah seperti berikut:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `avatar` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Antaranya, medan avatar digunakan untuk menyimpan laluan avatar pengguna.

2. Cipta model pengguna

Dalam rangka kerja ThinkPHP, kami boleh mengendalikan pangkalan data melalui kelas Model. Oleh itu, kita perlu mencipta model Pengguna terlebih dahulu:

<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
    protected $table = &#39;user&#39;;
}

Perlu diingatkan bahawa kita perlu menentukan nama jadual sebagai 'pengguna', jika tidak ThinkPHP akan secara automatik menukar nama kelas model ke dalam jadual data nama.

3. Buat Pengawal Pengguna

Seterusnya, kami boleh mencipta Pengawal Pengguna untuk mengendalikan pendaftaran pengguna dan fungsi muat naik avatar:

<?php
namespace app\index\controller;

use app\index\model\User;
use think\Controller;
use think\facade\Request;

class UserController extends Controller
{
    // 用户注册
    public function register()
    {
        if (Request::isPost()) {
            // 处理表单提交
            $user = new User;
            $user->username = Request::param('username');
            $user->password = md5(Request::param('password'));
            
            // 上传头像
            $avatar = Request::file('avatar');
            if ($avatar) {
                $savePath = '/uploads/';
                $saveName = md5($avatar->getOriginalName()) . '.' . $avatar->getExtension();
                $avatar->move('.' . $savePath, $saveName);
                $user->avatar = $savePath . $saveName;
            }
            
            $user->save();
            $this->redirect('/index/Index/index');
        }

        return $this->fetch('user/register');
    }

    // 修改头像
    public function changeAvatar()
    {
        if (Request::isPost()) {
            // 处理表单提交
            $user = User::get(session('user.id'));

            // 删除原头像
            if ($user->avatar) {
                unlink('.' . $user->avatar);
            }

            // 上传新头像
            $avatar = Request::file('avatar');
            if ($avatar) {
                $savePath = '/uploads/';
                $saveName = md5($avatar->getOriginalName()) . '.' . $avatar->getExtension();
                $avatar->move('.' . $savePath, $saveName);
                $user->avatar = $savePath . $saveName;
                $user->save();
            }

            return $this->success('修改头像成功!', '/index/Index/index');
        }

        return $this->fetch('user/change_avatar');
    }
}

Kod di atas melaksanakan pendaftaran Pengguna dan fungsi muat naik avatar. Disebabkan keterbatasan ruang, artikel ini tidak menerangkannya secara terperinci. Perlu diingatkan bahawa laluan menyimpan avatar pengguna adalah dalam direktori /public/uploads/.

3. Ubah suai avatar

1. Ubah suai model pengguna

Dalam langkah sebelumnya, kami telah melaksanakan fungsi muat naik avatar. Walau bagaimanapun, apabila pengguna ingin mengubah suai avatar, kita perlu memadamkan avatar asal dahulu dan kemudian memuat naik avatar baharu ke pelayan. Oleh itu, kita perlu menambah kaedah deleteAvatar() pada model Pengguna untuk memadam avatar pengguna:

public function deleteAvatar()
{
    if ($this->avatar) {
        unlink('.' . $this->avatar);
        $this->avatar = null;
        $this->save();
    }
}

2. Ubah suai pengawal pengguna

Seterusnya, kita boleh mengubah suai UserController The kaedah changeAvatar() membolehkannya menyokong pemadaman avatar dan fungsi muat naik:

public function changeAvatar()
{
    if (Request::isPost()) {
        // 处理表单提交
        $user = User::get(session('user.id'));

        // 删除原头像
        $user->deleteAvatar();

        // 上传新头像
        $avatar = Request::file('avatar');
        if ($avatar) {
            $savePath = '/uploads/';
            $saveName = md5($avatar->getOriginalName()) . '.' . $avatar->getExtension();
            $avatar->move('.' . $savePath, $saveName);
            $user->avatar = $savePath . $saveName;
            $user->save();
        }

        return $this->success('修改头像成功!', '/index/Index/index');
    }

    return $this->fetch('user/change_avatar');
}

Kod di atas melaksanakan fungsi pemadaman dan muat naik avatar pengguna. Perlu diingatkan bahawa avatar asal perlu dipadamkan sebelum memuat naik avatar baharu.

4. Ringkasan

Melalui langkah di atas, kami telah berjaya melaksanakan fungsi muat naik dan pengubahsuaian avatar pengguna dalam rangka kerja ThinkPHP. Menggunakan pengetahuan asas ini, kami boleh mengoptimumkan lagi kod dan menambah fungsi berkuasa seperti pemangkasan avatar dan penukaran format imej untuk menyediakan pengguna dengan perkhidmatan yang lebih lengkap.

Atas ialah kandungan terperinci Cara mengubah suai avatar pengguna dalam rangka kerja ThinkPHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn