Laravel redirect route is not working using return but if i use echo its working why?

时间:2017-06-15 10:05:43

标签: php laravel-5

Hi guys i got this weird experience with laravel redirect->route('routeName'); here is the code

public static function loginCheckWithRedirect($routeName = false){

    if(functions::loginCheck()){
        if($routeName && is_string($routeName)){
            return redirect()->route($routeName);
        }
    }

    return false;
}

if I use echo redirect()->route($routeName), it works but return redirect()->route($routeName) doesnt. Does anyone here knows why ?

2 个答案:

答案 0 :(得分:2)

您需要了解returnecho

之间的区别
  1. Return:当您从另一个方法调用方法并返回一些数据时,返回数据将取代所调用的方法。
  2. Echo:当你使用echo时,它不会向调用函数或main函数返回一些数据,但它会直接显示数据。
  3. Example

    function myFun($param){
        return $param;
    }
    
    function ini(){
        myFun("Hello!");
    }
    

    以上代码在用户屏幕上不会显示任何内容,因为您没有在任何功能中添加显示代码。

    但如果你使用其中一个:

    function myFun($param){
        return $param;
    }
    
    function ini(){
        echo myFun("Hello!");
    }
    

    或者:

    function myFun($param){
        echo $param;
    }
    
    function ini(){
        myFun("Hello!");
    }
    

    输出将为Hello!

    回到你的问题, 你需要在被调用方法中回显重定向调用,或者在调用方法中返回返回的重定向调用

    这就是我所做的:

    Route file

        use App\Http\Controllers\TestController;
    
    Route::get('/', function(){
        return TestController::loginCheckWithRedirect('myRoute');
    });
    
    Route::get('/test', function(){
       return 'Redirected...';
    })->name("myRoute");
    

    TestController

        <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    class TestController extends Controller
    {
        public static function loginCheckWithRedirect($routeName = false){
    
            if(functions::loginCheck()){
                if($routeName && is_string($routeName)){
                    return redirect()->route($routeName);
                }
            }
    
            return false;
        }
    }
    

    以上代码正确重定向。希望这对你有帮助......

答案 1 :(得分:0)

您的代码运作正常。

我想问题是您的路线文件(web.php,如果您使用的是laravel 5.4)。

这就是我所做的:

Route::get('/test/{routeName}','HomeController@loginCheckWithRedirect')->name('test');
Route::get('/admin/login', 'Auth\AdminLoginController@showLoginForm')->name('admin.login');

HomeController替换为您的控制器。如果您想更改网址,请务必不要删除/{routeName}

示例:localhost:3000/test/admin.login将打开管理员登录页面,因为路由名称为admin.login,如上面的代码所示。