Мутатор для загрузки файлов - PullRequest
0 голосов
/ 30 октября 2018

Мне нужно записать путь к таблице для загруженного файла. Я жду пути того же самого файла uploads / fileName1540886604.jpg, но я получаю путь того же самого / tmp / phpQOolst.

form.blade.php

<input type="file" name="file">

PostController.php

public function store(Request $request, Post $post)
    {
$fileName = "fileName" . time() . '.' . $request->file('file')->getClientOriginalExtension();;
    $path = $request->file("file")->storeAs('uploads', $fileName, 'public');

 $post->setAttribute('file', $path);
 $post = $post->create($request->all())

Post.php

class Post extends Model
{

   protected $fillable = ['name', 'slug', 'content', 'file', 'published', 'created_by'];

public function setFileAttribute($value)
{
    //dd($value);
    $this->attributes['file'] = $value;
}

Когда я добавляю код dd ($ value), я получаю uploads / fileName1540886604.jpg для теста, но он комментируется, он сохраняется /tmp/phpQOolst.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы можете использовать мутатор для непосредственного сохранения файла

public function setFileAttribute($file)
{
    $fileName = "fileName" . time() . '.' . $file->getClientOriginalExtension();
    $path = $file->storeAs('uploads', $fileName, 'public');
    $this->attributes['file'] = $path;
}

тогда в контроллере нужно создать только сообщение:

$post = Post::create($request->all());
0 голосов
/ 30 октября 2018

Вы перезаписываете $ post всем из запроса.

Было бы лучше сделать что-то вроде

$path = $request->file("file")->storeAs('uploads', $fileName, 'public');
$post = new Post($request->all());
$post->file = $path;
$post->save();

или короче

$path = $request->file("file")->storeAs('uploads', $fileName, 'public');
$request->merge(['file' => $path]); //Overwrite file in the request
$post = Post::create($request->all());

Но недостатком будет то, что у вас больше нет доступа к объекту File, поэтому

$post = Post::create($request->except('file')->toArray() + ['file' => $path]);

Может также работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...