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 ?
答案 0 :(得分:2)
您需要了解return
和echo
Return
:当您从另一个方法调用方法并返回一些数据时,返回数据将取代所调用的方法。Echo
:当你使用echo时,它不会向调用函数或main函数返回一些数据,但它会直接显示数据。 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
,如上面的代码所示。