it-swarm-pt.tech

Laravel 5 redirecionar para ações do controlador

Se eu quiser redirecionar para a ação de um controlador. Essa ação do controlador deve ser registrada em routes.php?

8
DengDeng

Se você quiser usar um redirecionamento como este: 

return redirect()->action('[email protected]');

Esta ação deve ser registrada no arquivo routes.php. 

Mas tenha cuidado: funciona apenas com rotas GET confiáveis.

Você pode ver as ações disponíveis digitando 

php artisan route:list

no seu terminal. 

Eu configurei alguns arquivos para propósitos de teste (parece que o laravel está redirecionando para métodos GET disponíveis com a mesma assinatura de parâmetro, ao tentar redirecionar para métodos não-get: 

// routes.php

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

Route::get('start', '[email protected]');



// routes, we could redirect to

// get route
Route::get('test', '[email protected]');

// post route
Route::post('testPost', '[email protected]');


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


});

Um Controlador de Teste, que é usado para redirecionar

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class TestController extends Controller
{
    public function start()
    {

        // works
        return redirect()->action('[email protected]');

        // method not allowed exception
        return redirect()->action('[email protected]');


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

        // works
        return redirect()->action('[email protected]');

        // redirects to '[email protected]'
        return redirect()->action('[email protected]');


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

        // redirects to '[email protected]'
        return redirect()->action('[email protected]', 1);

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

        // redirects to '[email protected]'
        return redirect()->action('[email protected]', 1);
    }
}

Outro controlador, estou redirecionando para: 

<?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

Sim, o arquivo routes.php deve conter detalhes sobre o URL e o Controller/Action:

// Get route
Route::get('/page', '[email protected]');
// Post route
Route::post('/login', '[email protected]');
0
Niraj Shah