Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

PetroGromovo's avatar

How to replace data in middleware on data submitting

Hello, In Laravel 5.8 app submitting form with the data I need to clear data, like doubled spaces, so I created middleware with clearing code :

app/Http/Middleware/WorkTextString.php :
<?php

namespace App\Http\Middleware;

use Closure;
use App\Http\Traits\funcsTrait;
use function PHPSTORM_META\type;

class WorkTextString
{

    use funcsTrait;
    public function handle($request, Closure $next, $strip_tags_excluding= false )
    {
        $inputDataArray = $request->all();

        \Log::info($request->all());


        $stripTagsExcludingArray= $this->pregSplit('/ /',$strip_tags_excluding);
        foreach( $inputDataArray as $next_field_name=>$next_field_value ) {
            if ( !empty($next_field_value) and is_string($next_field_value) ) {
                $skip_strip_tags= in_array($next_field_name,$stripTagsExcludingArray);
                $inputDataArray[$next_field_name] = $this->workTextString($next_field_value, $skip_strip_tags);
            }
        }

        \Log::info('$inputDataArray:: ::');  // I CHECK AND SEE CLEARED DATA!
        \Log::info($inputDataArray);

        $request->replace($inputDataArray); // THAT DOWS NOT WORK ?

        // $request->merge($inputDataArray); // ALSO I TRIED THIS WAY - does not work

        return $next($request);
    }

}

But I see that submitted data are not cleared. Lokks like $request->replace does not work for me...

in routes/api.php :

Route::resource('skills', 'API\Admin\SkillController')->middleware('WorkTextString'); 

How correctly ?

0 likes
6 replies
PetroGromovo's avatar

Reading the article I suppose I have to use cleanData of my middleware, so O commented method I used before and added method :

    private function cleanData(array $data)
    {
        \Log::info('$data:: ::');
        \Log::info($data);
        return collect($data)->map(function ($value, $key) {
            \Log::info('$value:: ::');
            \Log::info($value);
            $value= 'Some text ';
               return $value;
        })->all();
    }

Just to check and replace any value

BuT i got error in log file:

[2019-12-24 12:40:48] local.ERROR: Function name must be a string {"userId":1,"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Function name must be a string at /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:164)
[stacktrace]
#0 /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#1 /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/tymon/jwt-auth/src/Http/Middleware/Authenticate.php(32): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#2 /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Tymon\JWTAuth\Http\Middleware\Authenticate->handle(Object(Illuminate\Http\Request), Object(Closure))
#3 /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#4 /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#5 /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#6 /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#7 /mnt/_work_sdb8/wwwroot/lar/CTasksRestAPI/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(58): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
...

and no message I wrote in \Log::info... Which way is right ?

PetroGromovo's avatar

Who replaced submitted data in middleware, please give a hint which method did you use ?

Tray2's avatar
Tray2
Best Answer
Level 73

I used set attributes for that instead.

    public function setTitleAttribute($value)
    {
        $this->attributes['title'] = ucwords(strtolower($value));
    }

It transforms the value before insert and update to the proper format.

1 like
PetroGromovo's avatar

Is it inside of model? You do not use any middleware ?

Nakov's avatar

@petrogromovo yes, inside the model. No need for middleware for this type of thing. @tray2 answer is what I'll do as well.

1 like

Please or to participate in this conversation.