繁体   English   中英

PHP laravel自动路由

[英]PHP laravel automatic routing

我正在使用laravel 5.5,并且尝试使用到控制器的自动路由,但它不起作用

在web.php(此版本的路由文件)中,有以下一行

Route::resource('panel', 'panel');
Route::resource('/', 'HomeController');

在面板中,我有以下操作

namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
class panel extends Controller{
    public function index(){
        return \View::make('panel.index');
    }

    public function registrar(){
        return \View::make('panel.registrar');
    }

}

但是它只是调用index()视图,当用户访问url时不会调用registrar()视图

site.com/panel/registrar

在屏幕上打印跟随错误

"Method [show] does not exist on [App\Http\Controllers\panel]."

我尝试使用base_controller,但也无法正常工作

"Class 'App\Http\Controllers\Base_Controller' not found"

有没有办法识别这些动作?

这是一个具有基本CRUD操作的资源控制器,因此,要正常工作,必须定义其余方法,如您的情况,您应添加方法show() ,然后在该方法中呈现所需的视图。

资源控制器必须定义以下方法:

class TestController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

而且基本控制器显然不是Base_Controller而是其Controller

有关更多信息,请参见此处Laravel 5.5 Resource Controllers

资源路由设置了7条特定的路由,即控制器上需要的7种特定方法。7。如果您不希望所有7条路由,则必须以这种方式进行定义。

资源路由不是隐式控制器。 它不查看控制器上的方法,然后进行路由..资源路由是“特定的”事情。 Laravel中没有隐式控制器了,因为实际上没有意义。

Laravel 5.5 Docs-控制器-资源控制器

您创建的路由指向不存在的方法,这就是错误所在。

同样, Route::resource的第一个参数是资源“名称”,而不是PATH。 从技术上讲,它不是URI。 它是资源的名称。

Route::resource('/', ...) // not a name

如果不需要所有资源方法,请将此资源更改为simple get

  Route::get('/panel', 'panel@index');
  Route::get('/panel/registrar', 'panel@registrar');

并使用home代替/以获得不冲突的url

 Route::resource('home', 'HomeController');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM