Laravel 5重定向到控制器操作

时间:2016-03-29 06:06:10

标签: laravel-5 laravel-5.2

如果我想重定向到控制器的动作。此控制器操作必须在routes.php

中注册

2 个答案:

答案 0 :(得分:12)

如果你想使用这样的重定向:

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

此操作必须在routes.php文件中注册。

但要小心:它只适用于可靠的GET路线。

您可以通过输入

来查看可用的操作
php artisan route:list

在您的终端中。

我已经设置了一些文件用于测试目的(当尝试重定向到非get方法时,似乎laravel重定向到具有相同参数签名的可用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');


});

测试控制器,用于重定向

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

另一个控制器,我正在重定向到:

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


}

答案 1 :(得分:0)

是的,routes.php文件必须包含有关URL和控制器/操作的详细信息:

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