操作未定义 laravel/php 控制器
Action not defined laravel/php controller
我在 laravel 项目中遇到控制器操作问题,我不知道为什么,因为一切似乎都很好。
这是我关于错误部分的路线:
Route::get('/reminds','RemindController@index');
Route::get('/reminds','RemindController@create');
这是 RemindController.php 文件中定义的创建和索引方法:
public function index()
{
$reminds = Remind::all();
return View::make('remind.index', compact('reminds'));
}
public function create()
{
try {
$listyears = RemindController::generate_list(date('Y')-100, 101);
$listmonths = RemindController::generate_list(1, 12);
$listdays = RemindController::generate_list(1, 31);
return View::make('remind.create', compact('listyears', 'listmonths', 'listdays'));
} catch (Exception $e){
App:abort(404);
}
}
在create.blade.php(提醒视图)中,我有这个调用有问题的索引:
<div class="panel-heading">
<h2>create reminder</h2>
</div>
<div class="panel-body">
{!! Form::open(['action'=> 'RemindController@index', 'class' => 'form']) !!}
问题是,每次我尝试访问调用提醒创建表单的页面时,我都会收到错误消息:
ErrorException (E_ERROR)
Action App\Http\Controllers\RemindController@index not defined. (View: C:\Users\myusername\Desktop\project\prototype\resources\views\remind\create.blade.php)
但是我明确定义了它。我不明白。谢谢
您使用相同的 url 和相同的方法定义了两条路由
Route::get('/reminds','RemindController@index');
Route::get('/reminds','RemindController@create');
重命名其中一个
Route::get('/reminds','RemindController@index');
Route::get('/reminds/create','RemindController@create');
Route::get('/提醒','RemindController@index');
Route::get('/提醒','RemindController@create');
这是同一条路线,所以从技术上讲,这部分你已经有问题了。尝试更改 HTTP 协议或重命名您的路由。
Route::get('reminds','RemindController@index');
Route::post('reminds','RemindController@create');
或
Route::get('reminds','RemindController@index');
Route::get('reminds/create','RemindController@create');
也已经省略了路线上的第一个斜杠,这样做没有用。
---更新*
而不是使用静态调用路由
你可以使用这样的东西
$router->group(function(){
$this->get('/',['as' => "homepage" , 'use' => "MainController@homepage"] );
$this->group(['prefix' => "dashboard",'as' => "dashboard"],function(){
$this->get('/',['as' => "index",'use' => "DashboardController@index"]);
});
});
您已经为相同的 http 动词编写了相同的路由 url。
只需根据您的要求重命名它们即可。
为简单起见,建议为路由添加 name()。
为了以防万一这对某人有帮助,我遇到了同样的错误,但我的问题是我在定义路线时不小心使用了 Route::resource()
而不是 Route::get()
。我假设这与 Route::post()
.
的情况相同
我在 laravel 项目中遇到控制器操作问题,我不知道为什么,因为一切似乎都很好。
这是我关于错误部分的路线:
Route::get('/reminds','RemindController@index');
Route::get('/reminds','RemindController@create');
这是 RemindController.php 文件中定义的创建和索引方法:
public function index()
{
$reminds = Remind::all();
return View::make('remind.index', compact('reminds'));
}
public function create()
{
try {
$listyears = RemindController::generate_list(date('Y')-100, 101);
$listmonths = RemindController::generate_list(1, 12);
$listdays = RemindController::generate_list(1, 31);
return View::make('remind.create', compact('listyears', 'listmonths', 'listdays'));
} catch (Exception $e){
App:abort(404);
}
}
在create.blade.php(提醒视图)中,我有这个调用有问题的索引:
<div class="panel-heading">
<h2>create reminder</h2>
</div>
<div class="panel-body">
{!! Form::open(['action'=> 'RemindController@index', 'class' => 'form']) !!}
问题是,每次我尝试访问调用提醒创建表单的页面时,我都会收到错误消息:
ErrorException (E_ERROR)
Action App\Http\Controllers\RemindController@index not defined. (View: C:\Users\myusername\Desktop\project\prototype\resources\views\remind\create.blade.php)
但是我明确定义了它。我不明白。谢谢
您使用相同的 url 和相同的方法定义了两条路由
Route::get('/reminds','RemindController@index');
Route::get('/reminds','RemindController@create');
重命名其中一个
Route::get('/reminds','RemindController@index');
Route::get('/reminds/create','RemindController@create');
Route::get('/提醒','RemindController@index'); Route::get('/提醒','RemindController@create');
这是同一条路线,所以从技术上讲,这部分你已经有问题了。尝试更改 HTTP 协议或重命名您的路由。
Route::get('reminds','RemindController@index');
Route::post('reminds','RemindController@create');
或
Route::get('reminds','RemindController@index');
Route::get('reminds/create','RemindController@create');
也已经省略了路线上的第一个斜杠,这样做没有用。
---更新*
而不是使用静态调用路由
你可以使用这样的东西
$router->group(function(){
$this->get('/',['as' => "homepage" , 'use' => "MainController@homepage"] );
$this->group(['prefix' => "dashboard",'as' => "dashboard"],function(){
$this->get('/',['as' => "index",'use' => "DashboardController@index"]);
});
});
您已经为相同的 http 动词编写了相同的路由 url。
只需根据您的要求重命名它们即可。 为简单起见,建议为路由添加 name()。
为了以防万一这对某人有帮助,我遇到了同样的错误,但我的问题是我在定义路线时不小心使用了 Route::resource()
而不是 Route::get()
。我假设这与 Route::post()
.