2016-06-10 66 views
1

我現在有一個表單,它工作得很好。基本上我是添加用戶,並根據表單分配角色。大。但是現在我正試圖在「avatar」列下的用戶表中添加一個頭像。我發現有道理,但沒有工作,得到錯誤「非靜態方法照亮\ HTTP \支持:: hasFile()不應該被靜態地稱爲」Laravel在用戶註冊中添加頭像

AuthController.php

//imports 
use App\User; 
use App\Role; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 
use Illuminate\Http\Request; 

//create method 
protected function create(array $data) 
    { 



     //Creat the user 
     $create = User::create([ 
      'first_name' => $data['first-name'], 
      'last_name' => $data['last-name'], 
      'phone' => $data['phone'], 
      'avatar' => $data['avatar'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 

     //Is it a User? Then give them that role 
     if ($data['form'] == 'user') 
     { 
      $user = User::find($create->id); 

      $role = Role::where('name', '=', 'user')->firstOrFail(); 

      $user->roles()->attach($role->id); 
     } 

     //Is it an Admin? Then give them that role 
     if ($data['form'] == 'admin') 
     { 
      $user = User::find($create->id); 

      $role = Role::where('name', '=', 'owner')->firstOrFail(); 

      $user->roles()->attach($role->id); 
     } 

     //Did they upload an Avatar 
     if (Request::HasFile('avatar')) 
     { 

      $file = Request::file('avatar'); 
      $img_path = '/uploads/avatars/'; 

      $image_name = time() . '-' . $file->getClientOriginalName(); 

      $file->move(public_path() . $img_path, $image_name); 

      $image_alter = Image::make(sprintf(public_path() . $img_path . '%s', $image_name))->resize(75, 75)->save(); 

      $user->avatar = $image_name; // Note we add the image path to the databse field before the save. 

     } 

     return $create; 
    } 
+0

由你有這條線的兩倍的方式,它的無用我想既然你可以使用相同的用戶$'$ USER =用戶::發現($ create-> id);' –

回答

0

嘗試向方法添加請求

protected function create(Request $request, array $data){ 
//code 
} 
0

這是一個標準的PHP錯誤消息。您正在靜態調用該方法,即從類中調用該方法(Request::hasFile())。 您應該從類Request的實例中調用它。 您可以通過調用服務容器獲得該實例:

protected function create(array $data){ 
    // ... 
    $request = app('request'); 

    if ($request->hasFile('avatar')) { 

    // ... 

(這也可能是其注入作爲控制器方法參數的Request實例更自然的這一工程時,在由框架路由調用的方法去做。我建議,因爲你自己調用的內部方法這個辦法了。)

+0

更像是一個重複的答案給我更好的解釋 –

+0

這兩個解決方案都沒有工作,獲取「Class App \ Http \ Controllers \ Auth \ AuthController不存在」的新錯誤。我會用當前代碼和新錯誤 – Packy

+0

重新發布這個問題,這可能是一個;丟失或什麼的,它不是什麼大事我猜 –

0

您可以使用use Request;代替use Illuminate\Http\Request;

0

請參見下面的代碼。這個對我有用。

protected function create(array $data) 
{ 
    $request = app('request'); 

    if($request->hasfile('avatar')){ 
     $avatar = $request->file('avatar'); 
     $filename = time() . '.' . $avatar->getClientOriginalExtension(); 
     Image::make($avatar)->resize(300, 300)->save(public_path('/uploads/avatars/' . $filename)); 
    } 
    return User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'avatar' => $filename, 
     'password' => bcrypt($data['password']), 
    ]); 
} 

查看詳情代碼在這裏:http://www.pranms.com/how-to-add-avatar-field-in-the-registration-form-in-laravel-5-2/