Пожалуйста, получите эту ошибку fileUpload () должен быть экземпляром Illuminate \ Http \ Request при попытке загрузить изображение - PullRequest
0 голосов
/ 24 апреля 2020

Аргумент 1, передаваемый в App \ Candidate :: fileUpload (), должен быть экземпляром Illuminate \ Http \ Request, заданным экземпляром Illuminate \ Http \ UploadedFile, вызываемым в C: \ xampp \ htdocs \ Laravel -voting-system \ app \ Candidate. php в строке 40

пожалуйста, я не знаю, где это неправильно именно здесь я написал функцию загрузки заполнения ( кандидат. php)

Второе изображение - это путь вниз той же папки-кандидата. php

это мой пользователь. php на ваш взгляд

<?php

namespace App;


use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','regno'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function role(){
        return $this->belongsTo('App\Role');
    }

    public function candidate(){
        return $this->hasOne('App\Candidate');
    }

    public function registerVoter($name,$email,$password,$regno){
        $newVoter = new User;
        $newVoter->name = $name;
        $newVoter->email = $email;
        $newVoter->password = bcrypt($password);
        $newVoter->regno = $regno;
        $newVoter->role_id = 2;
        $newVoter->save();
    }
    public static function addCandidate($studentId,$seat,$image){
        $user = User::find($studentId);
        (new Candidate)->add($user->name,$seat,$user->regno,$user->id,$image,);
    }

И мой AdminController. php

    <?php

namespace App;


use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password','regno'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function role(){
        return $this->belongsTo('App\Role');
    }

    public function candidate(){
        return $this->hasOne('App\Candidate');
    }

    public function registerVoter($name,$email,$password,$regno){
        $newVoter = new User;
        $newVoter->name = $name;
        $newVoter->email = $email;
        $newVoter->password = bcrypt($password);
        $newVoter->regno = $regno;
        $newVoter->role_id = 2;
        $newVoter->save();
    }
    public static function addCandidate($studentId,$seat,$image){
        $user = User::find($studentId);
        (new Candidate)->add($user->name,$seat,$user->regno,$user->id,$image,);
    }

Я очень ценю ваши усилия, Заранее спасибо.

1 Ответ

0 голосов
/ 24 апреля 2020

Похоже, вы смешали контроллер с моделью.

Видите, контроллер предназначен для обработки запроса. Модель предназначена для сохранения сущностей и управления их отношениями. Ваш Candidate не является ни тем, ни другим.

Laravel имеет систему подсказок типа, которая автоматически вводит экземпляр типа подсказки в методе контроллера. Следовательно, если бы у вас был контроллер типа

<?php
 use  Illuminate\Http\Request;

  class CandidateController {

    public function fileUpload( Request $request ) {
      ...
    }
  }

, а маршрут типа

Route::post('candidate','CandidateController@fileUpload');

, тогда метод fileUpload получил бы экземпляр \Illuminate\Http\Request

Теперь, если вы отправили файл из внешнего интерфейса, файл будет в запросе (как показано в вашем коде)

$image = $request->file('image');  // 'image' is just the input name

Так что вам не следует вызывать fileUpload из другого метода , Это наоборот. Интерфейс отправляет запрос, контроллер обрабатывает запрос и «извлекает» файл, который затем будет сохранен в диске / облаке / где угодно, и его метаданные будут отправлены в DDBB и связаны с действующим пользователем

Контроллер перемещает изображение (вы уже делаете это) по его намеченному пути, а затем сохраняет его в модели, как

  public function fileUpload( Request $request ) {

    $image = $request->file('image');  

    $candidate = new App\Candidate();

    $name = time().'.'.$image->getClientOriginalName();

    $image->move(public_path("images"), $name);
    $candidate->path = public_path('images').'/'.$name;
    $candidate->save();
  }

Так как есть другие поля, я думаю, вы отправляете их также в запросе, как

    $candidate->seat = $request->seat;

И действующий пользователь, если вам это нужно, должен прийти от помощника по аутентификации (например, сеанса или токена), чтобы избежать злонамеренного посетителя, отправляющего идентификатор другого пользователя.

...