"找不到控制器方法。" Laravel错误。我怎样才能找出它无法找到的方法?

时间:2014-09-17 17:33:42

标签: apache laravel-4 laravel-routing

一个月前我开始使用Laravel。试图在其上创建一个包含一个表单的页面,并且我一直没有找到" Controller方法。"错误。页面上只有一个表单,该方法被称为正常,并进行我想要的查询。它确实重定向到具有该表单的同一页面/ dashboard / edit / module。

如果我能看到没有找到哪种方法或者我的代码中的位置,那将是非常棒的。我有什么想法可以做到这一点?有人在global.php中提到App :: error或搞乱Log :: error但我无法获得更多信息。

编辑:

我发现只有将视频上传到表单时才能找到表单操作。除此之外,它给了我同样的错误。这是此表单的控制器方法。带有此表单的页面是/ dashboard / edit / module,我希望在此运行后重新加载该页面。

public function postSection(){

    $path = public_path() . "/videos/";

    $filename = uniqid() . '.mp4';

    $file_path = $path . $filename;

    $moduleID = Input::get('moduleID');

    if(!Input::hasFile('video')){

        return Redirect::back()->with('error', 'Must enter a valid video file.');

    }else{

        try {

            Input::file('video')->move($path, $filename);

            $section = New Section;

            $section->module_id = $moduleID;
            $section->video = $file_path;
            $section->save();

            //I was trying to use this instead of View::make to stop form resubmission
            //return Redirect::to('/dashboard/edit/module')->with('moduleID', $moduleID);

            return View::make('forms.editMod')->with('moduleID', $moduleID);

        }catch ( Exception $e){

            return Redirect::back()->with('error', 'Unable to save the video file.');

        }
    }

}

编辑:和我的routes.php

    //Route for the home page
    Route::get('/', function(){ return View::make('home'); });

    //Controllers
    Route::controller('dashboard/edit', "ContentController");

    Route::controller('user', "UserController");

    Route::group(array('before'=> 'auth|dash'), function(){

    //dashboard home
    Route::get('/dashboard', function(){ return View::make('dashboard');});

    //dashboard subs
    Route::get('dashboard/modules', function(){ return View::make('forms.module');});
    Route::get('dashboard/users', function(){ return View::make('users');});
    Route::get('dashboard/reporting', function(){ return View::make('reporting');});


    //user pages
    Route::get('dashboard/register', function(){ return View::make('forms.register');});
    Route::post('dashboard/edit/user', array('before'=>'csrfajax', function(){

        $id = Input::get('userID');

        $user = User::find($id);

        return View::make('forms.editUser')->with('user', $user);
    }));
});

表格......

{{ Form::open(array('files' => true, 'action' => 'ContentController@postSection', 'id' => 'sectionform')) }}
        <fieldset>
            {{ Form::label('Video (mp4)') }}
            {{ Form::hidden('moduleID', $module->id)}}
            {{ Form::file('video', array('id' => 'video', 'class' => 'form-control')) }}<br>
            {{ Form::submit('Save') }}
        </fieldset>
        {{ Form::close() }}

1 个答案:

答案 0 :(得分:0)

routes.php中,为了实现此方法,您使用Route::controller,这会产生RESTful路由。如果浏览器的HTTP请求使用了POST操作,则您将正确路由到public function postSection(){}。但是如果HTTP请求使用GET(这是Web浏览的默认设置),特别是当浏览器没有提交数据时,Laravel会寻找一种名为public function getSection(){}的方法。这可以解释为什么当你上传某些内容(即使用POST)时,你会到达页面,否则你就不会。

有关隐式路由的完整内容,请参阅官方文档:http://laravel.com/docs/controllers#implicit-controllers