Laravel product detail

1

I'm doing a project in laravel and I want to have two show functions in the controller, that is.

In first I have the list of categories that gives an id to each element, then I enter the http://localhost:8000/item/4 element having this url, but that element has two buttons that will give the same view of the element adding functionality.

that is, I have this view

and I want to get to this

My question is how do I get to the second view?

I have a resource controller and this is your code

class ExercisesController extends Controller
{

     public function index()
     {

         if( Auth::check() ){
             $exercises = Exercise::where('user_id', Auth::user()->id)->get();

              return view('exercises.index', ['exercises'=> $exercises]);  
         }
         return view('auth.login');



    }



     public function create( $category_id = null )
     {

         $categories = null;
         if(!$category_id){
            $categories = Category::where('user_id', Auth::user()->id)->get();
         }

         return view('exercises.create',['category_id'=>$category_id, 'categries'=>$categories]);
     }


     public function store(Request $request)
     {


         if(Auth::check()){
             $exercise = Exercise::create([
                 'name' => $request->input('name'),
                 'description' => $request->input('description'),
                 'category_id' => $request->input('category_id'),
                 'user_id' => Auth::user()->id
             ]);


             if($exercise){
                 return redirect()->route('exercises.show', ['exercises'=> $exercise->id])
                 ->with('success' , 'You have an other one');
             }

         }

             return back()->withInput()->with('errors', 'Error creating new pet');

     }



      public function show(Exercise $exercise)
 {

    $exercise = Exercise::find($exercise->id);

    return view('exercises.show', compact('exercise'));
 }


     public function edit(Exercise $exercise)
     {

         $exercise = Exercise::find($exercise->id);

         return view('exercises.edit', ['exercise'=>$exercise]);
     }


     public function update(Request $request, exercise $exercise)
     {



       $exerciseUpdate = Exercise::where('id', $exercise->id)
                                 ->update([
                                         'name'=> $request->input('name'),
                                         'description'=> $request->input('description')
                                 ]);

       if($exerciseUpdate){
           return redirect()->route('exercises.show', ['exercise'=> $exercise->id])
           ->with('success' , 'An other exercise');
       }

       return back()->withInput();



     }


     public function destroy(Exercise $exercise)
     {


         $findexercise = Exercise::find( $exercise->id);
         if($findexercise->delete()){


             return redirect()->route('exercises.index')
             ->with('success' , 'It is gone');
         }

         return back()->withInput()->with('error' , 'something happend');


     }

     public function search(Request $req)
    {
        $exercises= Exercise::all();
        return view ('search', compact ('exercises'));
    }


    public function getSearch (Request $req)
    {
        if($req->ajax())
        {
            $find= Exercise::where('name', 'LIKE','%' .$req->search. '%' )->get();
            return response()->json($find);

        }
    }

        public function details(Exercise $exercise)
 {

    $exercise = Exercise::find($exercise->id);

    return view('exercises.go', compact('exercise'));
 }


}

I have a confusion with the routes because I do not know how to get to the details.

    
asked by Bella 27.03.2018 в 02:55
source

1 answer

1

What I would do is pass an optional parameter in the URL, so that if the parameter is present or at a certain value, show a view, otherwise, the other, however for that you should remove from the Route :: resource the show method.

Routes

Route::resource('exercises', 'ExerciseController', ['except' => [
    'show'
]]);

Route::get('exercises/{exercise}/{detalle?}', 'ExerciseController@show')->name('exercise.show');

Controller method

public function show(Exercise $exercise, Request $req)
{
    // No necesitas hacer un find porque estás usando Route Model binding

    if (isset($req->detalle) {
        return view('exercises.go', compact('exercise'));
    } else {
        return view('exercises.show', compact('exercise'));
    }
}
    
answered by 27.03.2018 / 03:31
source