Laravel 5 перенаправляет на действия контроллера

Если я хочу перенаправить на действие контроллера. Должно ли это действие контроллера регистрироваться в routes.php?

Ответ 1

Если вы хотите использовать перенаправление следующим образом:

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

Это действие должно быть зарегистрировано в файле routes.php.

Но будьте осторожны: он работает только с надежными маршрутами GET.

Вы можете увидеть доступные действия, набрав

php artisan route:list

в вашем терминале.

Я установил некоторые файлы для целей тестирования (похоже, что laravel перенаправляет на доступные методы GET с одинаковой сигнатурой параметра при попытке перенаправить на методы не-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');


});

Контроллер тестирования, который используется для перенаправления

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

Другой контроллер, я перенаправляюсь на:

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


}

Ответ 2

Да, файл routes.php должен содержать сведения об URL-адресе и контролере/действии:

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