web-dev-qa-db-fra.com

Laravel 5 redirection vers les actions du contrôleur

Si je veux rediriger vers l'action d'un contrôleur. Cette action de contrôleur doit-elle être enregistrée dans routes.php?

8
DengDeng

Si vous souhaitez utiliser une redirection comme celle-ci: 

return redirect()->action('AnotherController@someMethod');

Cette action doit être enregistrée dans le fichier routes.php. 

Mais soyez prudent: cela ne fonctionne que si les itinéraires GET sont fiables.

Vous pouvez voir vos actions disponibles en tapant 

php artisan route:list

dans votre terminal. 

J'ai configuré certains fichiers à des fins de test (il semble que laravel redirige vers les méthodes GET disponibles avec la même signature de paramètre, lors d'une tentative de redirection vers des méthodes non-get: 

// routes.php

Route::group(['middleware' => ['web']], function () {

Route::get('start', 'TestController@start');



// routes, we could redirect to

// get route
Route::get('test', 'AnotherController@test');

// post route
Route::post('testPost', 'AnotherController@testPost');


// setup a resource with index, store, update, delete and show actions
Route::resource('resource', 'AnotherController');


});

Un contrôleur de test, utilisé pour la redirection

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class TestController extends Controller
{
    public function start()
    {

        // works
        return redirect()->action('AnotherController@test');

        // method not allowed exception
        return redirect()->action('AnotherController@testPost');


        /**
         *  Redirecting to routes setup via Route::resource
         */

        // works
        return redirect()->action('AnotherController@index');

        // redirects to 'AnotherController@index'
        return redirect()->action('AnotherController@store');


        // error: Missing required parameters for [Route: resource.destroy] [URI: resource/{resource}].
        return redirect()->action('AnotherController@destroy');

        // redirects to 'AnotherController@show'
        return redirect()->action('AnotherController@destroy', 1);

        // Missing required parameters for [Route: resource.update] [URI: resource/{resource}].
        return redirect()->action('AnotherController@update');

        // redirects to 'AnotherController@show'
        return redirect()->action('AnotherController@update', 1);
    }
}

Un autre contrôleur, je redirige vers: 

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class AnotherController extends Controller
{
    public function test()
    {
        dd('i am test');
    }

    public function testPost()
    {
        dd('i am testPost');
    }


    /**
     *  Resourceful routes below
     */

    public function index()
    {
        dd ('I am index');
    }


    public function store()
    {
        dd ('I am store');
    }

    public function destroy($id)
    {
        dd('I am destroy');
    }

    public function show($id)
    {
        dd('I am show');
    }

    public function update($id)
    {
        dd('I am update');
    }


}
10
shock_gone_wild

Oui, le fichier routes.php doit contenir des détails sur l'URL et le contrôleur/action:

// Get route
Route::get('/page', 'MyController@action');
// Post route
Route::post('/login', 'LoginController@login');
0
Niraj Shah