Как изменить значения запроса в laravel?

У меня есть следующий код,

Мой вопрос в том, как изменить значения запроса?

public function store(CategoryRequest $request)
{
    try {
        $request['slug'] = str_slug($request['name'], '_');
        if ($request->file('image')->isValid()) {
            $file = $request->file('image');
            $destinationPath = public_path('images/category_images');
            $fileName = str_random('16') . '.' . $file->getClientOriginalExtension();
            $request->image = $fileName;
            echo $request['image'];
            $file->move($destinationPath, $fileName);
            Category::create($request->all());
            return redirect('category');
        }
    } catch (FileException $exception) {
        throw $exception;
    }
}

Но,

для каждого запроса вывод

echo $request['image'];

выводит некоторый текст, например/tmp/phpDPTsIn

Ответ 1

Вы можете использовать метод merge() для объекта $request. См.: https://laravel.com/api/5.2/Illuminate/Http/Request.html#method_merge

В вашем коде это будет выглядеть так:

public function store(CategoryRequest $request)
{
    try {
        $request['slug'] = str_slug($request['name'], '_');
        if ($request->file('image')->isValid()) {
            $file = $request->file('image');
            $destinationPath = public_path('images/category_images');
            $fileName = str_random('16') . '.' . $file->getClientOriginalExtension();
            $request->merge([ 'image' => $fileName ]);
            echo $request['image'];
            $file->move($destinationPath, $fileName);
            Category::create($request->all());
            return redirect('category');
        }
    } catch (FileException $exception) {
        throw $exception;
    }
}

Несмотря на имя метода, он фактически заменяет любые значения, связанные с именами участников, указанными ключами параметра, а не конкатенацией их значений или чего-либо подобного.

Ответ 2

Вы устанавливаете новое имя файла, используя

$request->image = ...

но затем вы возвращаете его, используя доступный интерфейс массива класса Request.

Попробуйте установить имя файла, используя

$request['file'] = ...

или используйте метод merge() класса Request.