【问题标题】:Action not defined laravel/php controller动作未定义 laravel/php 控制器
【发布时间】:2017-11-30 15:10:10
【问题描述】:

我在 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(of 提醒视图) 我有这个调用有问题的索引:

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

但是我明确定义了它。我不明白。谢谢

【问题讨论】:

    标签: php laravel controller routes action


    【解决方案1】:

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

    这是同一条路线,所以从技术上讲,这部分你已经遇到了问题。尝试更改 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"]);
    });
    });
    

    【讨论】:

    • 谢谢!很好的解释。这是自 laravel 5 以来的新方法吗?
    • 实际上没有。不再建议对全局变量进行静态调用。您可以使用 route()->、 session()-> 、 cache()-> 等,而不是通过 Route::() 、 Session:: 、 Cache:: 等调用它,我将更新我的答案这个更清晰
    【解决方案2】:

    你定义了两个具有相同 url 和相同方法的路由

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

    重命名其中一个

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

    【讨论】:

    • Route::get('/reminds/create','RemindController@create');应该是 Route::post('/reminds','RemindController@create');
    • @jcorry 他的 create 方法只是用来显示数据,所以 imo 没关系。 post 更适合 store 方法
    【解决方案3】:

    您为相同的 http 动词编写了相同的路由 url。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-21
        • 2018-06-11
        • 2021-04-02
        • 1970-01-01
        • 2018-01-12
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        相关资源
        最近更新 更多