动作未定义laravel / php控制器

时间:2017-11-30 15:10:11

标签: php laravel controller routes action

我在laravel项目中遇到控制器动作的问题,我不明白为什么,因为一切都很好。

关于错误部分的我的路线:

Route::get('/reminds','RemindController@index');
Route::get('/reminds','RemindController@create');

继承了RemindController.php文件中定义的create和index方法:

    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)

但是我清楚地定义了它。我不明白谢谢

4 个答案:

答案 0 :(得分:2)

路线::得到(&#39; /提醒&#39;,&#39; RemindController @指数&#39); 路线::得到(&#39; /提醒&#39;,&#39; RemindController @创建&#39);

这是相同的路线,所以从技术上讲,你已经有了一个问题。尝试更改HTTP协议或重命名路由。

Route::get('reminds','RemindController@index');
Route::post('reminds','RemindController@create');

Route::get('reminds','RemindController@index');
Route::get('reminds/create','RemindController@create');

也已经省略了你路线上的第一个斜线,没有这样做。

---更新*

而不是使用静态调用Route

你可以使用这样的东西

$router->group(function(){
   $this->get('/',['as' => "homepage" , 'use' => "MainController@homepage"] );

   $this->group(['prefix' => "dashboard",'as' => "dashboard"],function(){
      $this->get('/',['as' => "index",'use' => "DashboardController@index"]);
});
});

答案 1 :(得分:1)

您使用相同的网址和相同的方法定义了两条路线

Route::get('/reminds','RemindController@index');
Route::get('/reminds','RemindController@create');

重命名其中一个

Route::get('/reminds','RemindController@index');
Route::get('/reminds/create','RemindController@create');

答案 2 :(得分:0)

您为同一个http动词编写了相同的路径网址。

只需将它们重命名为您的要求即可。 为简单起见,建议为路由添加name()。

答案 3 :(得分:0)

以防万一这对某人有帮助,我也遇到了同样的错误,但是我的问题是在定义路线而不是Route::resource()时不小心使用了Route::get()。我认为这与Route::post()的情况相同。