PHP laravel automatic routing

I am using laravel 5.5 and I am trying to use a automatic route to the controller but it isn't working

In the web.php(the routing file for this version) I have the follow line

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

In the panel I have the follow actions

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');
    }

}

but it's only calling the index() view the registrar() view is not being called when user acess the url

site.com/panel/registrar

the follow erro is printing in the screen

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

I tried to use the base_controller but it don't work too

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

is there an way to identify these actions ?

Upvotes: 0

Views: 5821

Answers (3)

Niklesh Raut
Niklesh Raut

Reputation: 34914

Change this resourse to simple get , if you don't need all resource methods

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

And use home instead just / to get unconflicted url

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

Upvotes: 2

lagbox
lagbox

Reputation: 50491

Resource routing sets up 7 specific routes, that is 7 specific methods you need on the controller, 7. If you dont want all 7 of those routes you have to define it that way.

Resource routing is not implicit controllers. It does not look at the method on the controller then make routes .. Resource routing is a 'specific' thing. We do not have implicit controllers any more in Laravel as there is really no point.

Laravel 5.5 Docs - Controllers - Resource Controllers

You have routes that are created that point to methods that don't exist, that is what the error is.

Also, the first argument to Route::resource is a resource 'name', not a PATH. It is not technically a URI. It is a name of a resource.

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

Upvotes: 5

Leo
Leo

Reputation: 7420

This is a resource controller with basic CRUD operations, so in order to work you have to define the rest methods like in your case you should add a method show() and then render the view you want in that method.

A resource controller must have the following methods defined:

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)
    {
        //
    }
}

And base controller obviusly it is not Base_Controller but its Controller

For more please reffer here Laravel 5.5 Resource Controllers

Upvotes: 3

Related Questions