laravel 在函数中使用 Request 时控制器出错

laravel Controller error when using Request in function

我用php artisan make:controller newsController --resource

制作控制器

之后,当我在函数 index 中转到我的控制器时,我想添加 Request $request

public function index(Request $request)
{   

}

是return错误:

Declaration of App\Http\Controllers\Admin\NewsController::index(Illuminate\Http\Request $request) should be compatible with App\Http\Controllers\Controller::index()

如何解决?试了很多方法还是不行!

编辑控制器

namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

已更新路线

Route::post('admin/news', 'Admin\NewsController@store');
Route::resource('admin/news', 'Admin\NewsController');

这很简单,只需创建没有索引路由的 Resource controller 或创建新的获取路由,如下所示:

Route::resource('admin/news', 'Admin\NewsController', ['except' => ['index']]);

然后在资源声明之前添加你的路由,像这样:

Route::post('admin/news', 'Admin\NewsController@index');

Route::resource('admin/news', 'Admin\NewsController', ['except' => ['index']]);

希望对你有帮助!!

这不需要任何 Laravel 解决方法。

修复:

a) 从基础控制器中删除 index 方法

b) 使基本控制器中的 index 方法将 Illuminate\Http\Request 作为参数,并在每个控制器的 index 在整个应用程序中从基继承的方法。

c) 首先弄清楚为什么在 base 中定义了一个 index 方法,如果需要,将其移动到特征中使用child 类 代替。 (允许您完全覆盖该方法)

b不是一个好的选择,只是为了说明一点

证明的问题:

class Foo
{
    public function index()
    {
        //
    }
}

class Bar extends Foo
{
    public function index(\Illuminate\Http\Request $request)
    {

    }
}

Declaration of Bar::index(Illuminate\Http\Request $request) should be compatible with Foo::index()

您想覆盖 index 操作。

您还想将参数传递到此 index 操作中。

App\Http\Controllers\Controller::index()不带参数。

所以他们不是"compatible"。

尝试这种"helper-funtion"方式:

public function index() {

$request = request() // use the helper function

// ...you code here...
}

您可以从资源中禁用 index 并在资源之前或之后使用不同的方法名称定义路由:

    Route::get('resources', 'ResourceController@getResources');
    Route::resource('resources', 'ResourceController', $restResource)->except(['index']);