1

Currently facing an issue with an old Laravel project I am trying to revive and update. The error we're receiving is being thrown on line 11 inside of MessagesController like so: "…/app/Http/Controllers/Administrator/MessagesController.php:11"

Declaration of 
App\Http\Controllers\Administrator\MessagesController::getUsername(Illuminate\Http\Request $request)
should be compatible with 
App\Http\Controllers\Controller::getUserName(?App\Http\Controllers\Request $request = NULL)

Messages Controller:

namespace App\Http\Controllers\Members;

use App\Http\Controllers\Controller;
use App\Message;
use App\User;
use Illuminate\Http\Request;
use DB;
use Response;

class MessagesController extends Controller
{

    //trimmed for Stackoverflow

    public function getUsername(Request $request)
    {
        $term = $request->input('term');
        $results = array();

        $queries = DB::table('users')->where('username', 'LIKE', '%' . $term . '%')
            ->take(5)
            ->get();

        foreach ($queries as $query) {
            $results[] = [
                'id' => $query->id,
                'value' => $query->username
            ];
        }

        return Response::json($results);
    }
}

Base Controller:

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Sentinel;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected function getUser()
    {
        $user = Sentinel::getUser();
        return $user;
    }

    protected function getUserName(Request $request = null)
    {
        return $this->getUser()->username ?? null;
    }

    protected function getUserID()
    {
        return $this->getUser()->id ?? null;
    }
}
Joshua Newell
  • 13
  • 1
  • 3

2 Answers2

1

Your parent Controller has not included use Illuminate\Http\Request;.

Secondly your parent getUserName method, has the request parameter set to nullable. So change your MessagesController to this.

public function getUsername(?Request $request)
{
mrhn
  • 17,961
  • 4
  • 27
  • 46
  • maybe not, now i'm receiving Too few arguments to function App\Http\Controllers\Controller::getUsername() 0 passed in app/Http/Controllers/Administrator/AdminController.php on line 18 and exactly 1 expected – Joshua Newell Nov 24 '19 at 21:20
  • Thats a completely another controller. It seems in general weird to declare one method in the parent controller to overwrite it and run into these problems :) But show the code and i will look. – mrhn Nov 24 '19 at 23:13
0

This error could also be a result of having methods of the same name in a controller. For example,

    class Controller extends BaseController
{
    // use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    public function **contactUs**(?Request $request){
        (new MailingController())->**contactUs**($email, $full_name);
        return response()->json([
            'response'=>'Thank you for contacting us, we will reach back to you shourtly',
            'status'=>'200'
        ],
        200
        );
    }

}

After several debugging, I resolved it by renaming one of the contactUs methods. weird, but that solved my issue

Buchi
  • 368
  • 1
  • 4
  • 16