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']);
我用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']);