带参数的 Laravel 路由

Posted

技术标签:

【中文标题】带参数的 Laravel 路由【英文标题】:Laravel route with parameters 【发布时间】:2017-07-10 14:51:16 【问题描述】:

我正在使用 Laravel 路线从电子邮件中批准某些表格。 所以我加密了一些变量并创建了如下链接:

<a href="http://localhost/travel/tr/approveRequest?id=<?=$Encoded_travelRq_id?>&gsID<?=$Encoded_emp_gslab_id?>&decrypt<?=$Encoded_iv?>/">Approve</a>;

现在如何在 Laravel 端为此编写路由,在其中我可以分离 id、gsID 等变量,从 url 解密并可以发送到用于该路由的控制器函数?

【问题讨论】:

【参考方案1】:

通常我使用两种方式:

1º方式:

路线:

Route::get('approveRequest', 'ApproveController@approve');

控制器:

public function approve (Request $request) 
    $var1 = $request->input('var1');
    $var2 = $request->input('var2');
    
    // (...) do something with $var1 and $var2

2º方式:

路线:

Route::get('approveRequest/var1/var2', 'ApproveController@approve');

控制器:

public function approve ($var1, $var2) 
    
    // (...) do something with $var1 and $var2: they already have a instance

【讨论】:

【参考方案2】:

只需写一个GET 路由到approveRequest

Route::get('approveRequest', 'ApproveController@approve');

因为您使用的是 URL 参数,所以您可以像这样在 approve() 函数中简单地获取它们

public function approve(Request $request) 

     $id = $request->id;
     $gsID = $request->get('gsID');
     .... and so on for all your variables.

使用这种方法,参数的顺序无关紧要。

【讨论】:

为此我的 url 生成为 localhost/travel/tr/approveRequest?id=SR4%3D 我将路由写为 Route::get('approveRequest/par1', 'Gslab\Travel\TravelRequestController@approveTravelRequest');并且在控制器端公共函数approveTravelRequest($par1) echo $id = $par1;出口; 仍然没有采取路线没有得到 不要在路由定义中加入参数。看看我是怎么做的。因为您使用带问号? 的可选参数。【参考方案3】:

我使用了 3 种方法:

带控制器的单向

Route::get('post', 'PostController@store');
public function store(Request $request)

    $name = $request->input('name');
    // get your params               

2 路封闭路线

Route::get('/', function (Request $request) 
    $name = $request->name
//you can use this without input('name')
);

3- 在控制器中使用参数

Route::get('comment/var/var2', 'CommentController@edit');

public function approve ($var, $var2)         
    // use the variables 

【讨论】:

【参考方案4】:

有很多方法可以做到这一点。

方法一

如果你的网址如下:

<a href="http://localhost/travel/tr/approveRequest/<?=$Encoded_travelRq_id?>/<?=$Encoded_emp_gslab_id?>/<?=$Encoded_iv?>">Approve</a>;

您可以使用如下参数制作路线。

 Route::get('approveRequest/par1/par2/par3', 'ApproveController@approve');

并在您的函数中获取相应的参数,如下所示:

public function approve($par1,$par2,$par3,) 

     $id = $par1;
     $gsID = $par2;
     .... and so on for all your variables.
 

方法二使用请求方法:

如果你的网址是这样的:

<a href="http://localhost/travel/tr/approveRequest?id=<?=$Encoded_travelRq_id?>&gsID<?=$Encoded_emp_gslab_id?>&decrypt<?=$Encoded_iv?>/">Approve</a>;

然后定义Route Like:

Route::post('approveRequest', 'ApproveController@approve');

然后在你的控制器函数中你得到如下参数:

在你的控制器类命名空间后使用Request

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class SomeClassController extends Controller 

    public function approve(Request $request) 
    
        $id = $request->id;
        $gsID = $request->get('gsID');
         .... and so on for all your variables.
    

【讨论】:

以上是关于带参数的 Laravel 路由的主要内容,如果未能解决你的问题,请参考以下文章

laravel 路由参数的默认值怎么设置

Laravel:如何通过javascript加载带有动态参数的命名路由

laravel5.4重定向带参数

vue基础——动态路由匹配(带参数的路由)

laravel带参数分页

AngularJs 带参数的路由