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

时间:2017-11-20 04:59:04

标签: laravel laravel-5.5

我使用php artisan make:controller newsController --resource

制作控制器

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

public function index(Request $request)
{   

}

返回错误:

  

宣言   应用程序\ HTTP \控制器\管理\ NewsController ::指数(照亮\ HTTP \请求   $ request)应该兼容   应用\ HTTP \控制器\控制器::指数()

如何解决?我尝试了很多方法,但它仍然没有用!

编辑 - 控制器

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');

4 个答案:

答案 0 :(得分:2)

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

<强>修正:

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

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

c)弄清楚为什么首先在基础中定义了index方法,如果需要,将其移动到要在子类中使用的特征。 (允许你完全覆盖方法)

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

问题证明:

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

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

    }
}
  

Bar :: index(Illuminate \ Http \ Request $ request)声明应与Foo :: index()

兼容

答案 1 :(得分:1)

It's quite simple, just create your Resource controller without the index route Or Create new get route, like this:

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

Then add your route before the resource declaration, something like this:

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

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

Hope this helps you!!

答案 2 :(得分:1)

您要覆盖temp.variable_you_just_made=state.api_url+'/users' 操作。

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

index没有参数。

因此它们不“兼容”。

尝试这种“帮助功能”方法:

App\Http\Controllers\Controller::index()

答案 3 :(得分:0)

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

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