【问题标题】:Laravel - Call to undefined method App\\User::getAvatarUrlAttribute()Laravel - 调用未定义的方法 App\\User::getAvatarUrlAttribute()
【发布时间】:2020-01-18 09:37:54
【问题描述】:

我使用 Laravel-5.8 作为应用程序的后端。我已经为端点编写了所有 Api。

Laravel:ApiController

<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Carbon\Carbon;
use App\User;
use App\Activity;
use Avatar;
use Storage;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Mail;
use Audit;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;


class ApiController extends Controller
{
public $successStatus = 200;

public function __construct() {

}  

protected function guard()
{
    return Auth::guard();
}  

protected function respondWithToken($token)
{
    return response()->json([
        'access_token' => $token,
        'token_type' => 'bearer',
        'expires_in' => auth()->factory()->getTTL() * 60,
        'user' => auth()->user()->email
    ], 200);
} 

public function returnResponse($success, $data, $errorCode = 0, $message = false) {
    $response = array();
    $response['success'] = $success;
    $response['message'] = isset($message) ? $message : '';
    if ($errorCode) {
        $response['errorCode'] = isset($errorCode) ? $errorCode : 0;
    }
    $response['data'] = $data;
    return response()->json($response, 200);
}

public function register(Request $request) {
    $validator = Validator::make($request->all(), [
                'name' => 'required',
                'email' => 'required|string|email|max:255|unique:users',
                // 'phone' => 'required',
                // 'password' => 'required',
                'password' => 'required|string|min:6',
                // 'password' => 'required|string|min:6|confirmed',
                'password_confirmation' => 'required|same:password',
    ]);
    if ($validator->fails()) {
        return $this->returnResponse(false, ['error' => $validator->errors()], 1, 'Invalid User Data');
    }
    $input = $request->all();


    // code for check email / username / phone exist or not
    if(isset($input['email'])){

        $alreadyExist = User::where(function ($query) use ($input) {
                $query->where('email', '=', $input['email']);                           
            })->get();
    }

    if (count($alreadyExist->toArray()) > 0) {
        return $this->returnResponse(false, ['error' => 'Email Already Exist'], 1, 'User Data Already Exist');
    }


    // code for register user
    $user = new User();
    $user->name = $input['name'];
    $user->email = $input['email'];
    $user->password = bcrypt($input['password']);
    $user->save();

        $mainData = array();
        $mainData['to'] = $user->toArray()[0]['email'];
        $mainData['from'] = "support@tsllimited.com";
        $mainData['subject'] = "Successful Signup";
        $mainData['content'] = "Your signup was successful, you can login with the credentials.";

        $this->mailSend($mainData);

        Activity::create([
            'user_id'   =>  $user->id,
            'owner_id'  =>  $user->client_id,
            'type'      =>  "User Registration",
            'title'     =>  "Successful Signup of User",
            'state'     =>  2,
            'created_at'=>  date('Y-m-d H:i:s')
        ]);


    $success = array();
    $success['user_id'] = $user->id;
    $success['user']=$user;

    return $this->returnResponse(true, $success, 0, 'User registered successfully');
}


public function login(Request $request) {
    $authenticated = false;

    $validator = Validator::make($request->all(), [
        'email' => 'required|string|email',
        'password' => 'required|string',
        'remember' => 'boolean'
    ]);
    if ($validator->fails()) {
        return $this->returnResponse(false, ['error' => $validator->errors()], 1, 'Invalid User Data');
    }


    $remember = request('remember') ? true : false;
    if (Auth::guard('web')->attempt(['email' => request('email'), 'password' => request('password')], $remember)) {
        $authenticated = true;
    } 
    if ($authenticated == true) {
        $user = Auth::guard('web')->user();
        $date = date('Y-m-d');

        $success['userId'] = $user->id;
        $success['avatar'] = url('/storage/user') . '/' . $user->avatar;
        $success['email'] = $user->email;
        $success['token'] = $user->createToken('MyApp')->accessToken;
        return $this->returnResponse(true, $success);
    } else {
        $success = array();
        return $this->returnResponse(false, $success, 1, 'Invalid User Credential');
    }
} 
}

api.php

Route::group([
], function () {
Route::post('login', 'ApiController@login');
Route::post('register', 'ApiController@register');
Route::post('forgetPassword', 'ApiController@forgetPassword');

Route::group([
 'middleware' => 'auth:api'
], function() {
Route::get('logout', 'AuthController@logout');
Route::get('user', 'AuthController@user');
});
});

我停止并配置了 Laravel Passport 和 Spatie。我检查了代码,不知道错误到底是什么。当我在 POSTMAN 上测试 resgister Post Request 时,出现如下错误:

查看 POSTMAN 预览版:

什么可能导致错误,我该如何解决?

【问题讨论】:

  • 你的数据库中有头像栏吗?

标签: laravel api postman


【解决方案1】:

我最终自己解决了这个问题。问题是,我忘了补充:

public function getAvatarUrlAttribute()
{
    return Storage::url('avatars/'.$this->id.'/'.$this->avatar);
}

到用户模型。

谢谢

【讨论】:

  • 如果有适合您的答案,请将您的问题标记为已回答。
【解决方案2】:

也许你没有在你的User 类中使用你需要的trait

class User extends Authenticatable {
  use HasAvatar;
  // ...
}

【讨论】:

    【解决方案3】:

    您的users 表中没有avatar 列。

    【讨论】:

    • 我的 users 表中有头像,默认为 users/default.png 。为什么会出现问题?
    猜你喜欢
    • 1970-01-01
    • 2020-01-14
    • 2022-01-26
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-09
    • 1970-01-01
    • 2021-06-21
    相关资源
    最近更新 更多