如何在Laravel中声明采用这两个参数的路线?

时间:2017-03-01 18:02:48

标签: php laravel laravel-5 laravel-5.3 laravel-routing

我在 Laravel 中相当新,我遇到以下问题。

我必须声明一个处理这样的请求的路由:

http://laravel.dev/activate?email=myemail@gmail.com&token=eb0d89ba7a277621d7f1adf4c7803ebc

所以基本上它必须处理 / activate 资源的 GET 请求,其中包含2个参数电子邮件令牌

如何正确宣布此路线?那么我只需要创建带有这两个参数的相关控制器方法吗?

TNX

6 个答案:

答案 0 :(得分:3)

要将参数作为查询参数传递,您可以在请求对象中获取它们,您可以将它们注入到控制器方法中:

<强>路线

Route::get('/activate', 'YourController@controllerMethod');

<强>控制器

public function controllerMethod(Request $request)
{
    $email = $request->input('email');
    $code = $request->input('code');
}

此外,您还可以将第二个参数传递给input,以便在其中任何一个参数不存在时用作默认值。

答案 1 :(得分:1)

如果您不想使用URL重写(Pretty URL),只需将路由声明为:

Route::get('/activate','YourController@yourFunction');

并在控制器中检查令牌和电子邮件:

if(Input::has('email') && Input::has('token))
{
  //YOUR CODE
}

答案 2 :(得分:1)

routes.php(Laravel&lt; 5.3)或web.php(Laravel 5.4 +)中:

Route::get('/activate', [ 'as' => 'activate', function()
{
    return app()->make(App\Http\Controllers\ActivateController::class)->callAction('activate', $parameters = [ 'email' => request()->email, 'token' => request()->token ]);
}]);

所以我们实例化ActivateController类并调用方法'activate'这是第一个参数,然后提供方法以数组形式接收的参数列表。

public function activate($email, $token)
{
    echo "Email: $email"; // myemail@gmail.com
    echo "Token: $token"; // eb0d89ba7a277621d7f1adf4c7803ebc
    // do stuff
}

答案 3 :(得分:0)

路线是这样的:

Route::get('account/email/validate', 'AccountsController@validateEmail')->name('account.validate.email');

控制器方法如下:

public function validateEmail()
{
    // request()->email
    // request()->token
}

要使用查询字符串生成URL,您必须执行以下操作:

<a href="<?= route('account.validate.email', ['email' => $email, 'token' => $token]) ?>">

或者您也可以对其进行硬编码。

答案 4 :(得分:-1)

路线:

Route::get('/activate/{email}/{token}', [ 'uses' => 'ActivationController@activate', 'as' => 'activate' ]);

控制器:

ActivationController.php

public function activate($email, $token)
{
    // $email would be 'myemail@gmail.com'
    // $token would be 'eb0d89ba7a277621d7f1adf4c7803ebc'
    // do stuff...
}

或者如果您必须使用查询参数:

路线:

Route::get('/activate', [ 'uses' => 'ActivationController@activate', 'as' => 'activate' ]);

控制器:

public function activate(Request $request)
{
    if ( $request->has('email') && $request->has('token') )
    {
        $email = $request->email;
        $token = $request->token;
    }
}

答案 5 :(得分:-1)

您实际上将使用这两个功能中的一个。您不必一次使用这两个功能。 我的建议是只使用路线。 例如:

<?php Router::connect(
'/activate/:email/:token',
['controller' => 'Accounts', 'action' => 'activate'],
['email' => '.*', 'token' => '.*']); ?>

然后您将使用以下网址:your-site.com/accounts/activate/your-email@email.com/your-token

路线代码必须放在/config/routes.php

更多详情请见:https://book.cakephp.org/3.0/en/development/routing.html