如何在 Laravel 中声明采用这两个参数的路由?
How can I declare a route taking these two parameters in Laravel?
我是 Laravel 的新手,遇到以下问题。
我必须声明一个路由来处理这样的请求:
http://laravel.dev/activate?email=myemail@gmail.com&token=eb0d89ba7a277621d7f1adf4c7803ebc
所以基本上它必须使用两个获取参数 email
和 token
.
处理对 /activate
资源的 GET
请求
如何正确声明这条路线?那么我只需要创建带有这两个参数的相关控制器方法?
路线:
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;
}
}
如果你不想使用URL重写(Pretty URL)只需将路由声明为:
Route::get('/activate','YourController@yourFunction');
并在控制器中检查令牌和电子邮件:
if(Input::has('email') && Input::has('token))
{
//YOUR CODE
}
路线是这样的:
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]) ?>">
或者您也可以对其进行硬编码。
要将参数作为查询参数传递,您可以在可以注入控制器方法的请求对象中获取它们:
路线
Route::get('/activate', 'YourController@controllerMethod');
控制器
public function controllerMethod(Request $request)
{
$email = $request->input('email');
$code = $request->input('code');
}
此外,如果其中任何一个不存在,您还可以将第二个参数传递给 input
以用作默认值。
您实际上将使用这两个功能之一。您不必同时使用这两个功能。
我的建议是只使用路线。
示例:
<?php Router::connect(
'/activate/:email/:token',
['controller' => 'Accounts', 'action' => 'activate'],
['email' => '.*', 'token' => '.*']); ?>
然后您将使用以下 url: your-site.com/accounts/activate/your-email@email.com/your-token
路线代码必须放在/config/routes。php
更多详情见:https://book.cakephp.org/3.0/en/development/routing.html
在routes.php
(Laravel < 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 class 并调用方法 'activate' 这是第一个参数,然后提供该方法以数组形式接收的参数列表。
public function activate($email, $token)
{
echo "Email: $email"; // myemail@gmail.com
echo "Token: $token"; // eb0d89ba7a277621d7f1adf4c7803ebc
// do stuff
}
我是 Laravel 的新手,遇到以下问题。
我必须声明一个路由来处理这样的请求:
http://laravel.dev/activate?email=myemail@gmail.com&token=eb0d89ba7a277621d7f1adf4c7803ebc
所以基本上它必须使用两个获取参数 email
和 token
.
/activate
资源的 GET
请求
如何正确声明这条路线?那么我只需要创建带有这两个参数的相关控制器方法?
路线:
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;
}
}
如果你不想使用URL重写(Pretty URL)只需将路由声明为:
Route::get('/activate','YourController@yourFunction');
并在控制器中检查令牌和电子邮件:
if(Input::has('email') && Input::has('token))
{
//YOUR CODE
}
路线是这样的:
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]) ?>">
或者您也可以对其进行硬编码。
要将参数作为查询参数传递,您可以在可以注入控制器方法的请求对象中获取它们:
路线
Route::get('/activate', 'YourController@controllerMethod');
控制器
public function controllerMethod(Request $request)
{
$email = $request->input('email');
$code = $request->input('code');
}
此外,如果其中任何一个不存在,您还可以将第二个参数传递给 input
以用作默认值。
您实际上将使用这两个功能之一。您不必同时使用这两个功能。 我的建议是只使用路线。 示例:
<?php Router::connect(
'/activate/:email/:token',
['controller' => 'Accounts', 'action' => 'activate'],
['email' => '.*', 'token' => '.*']); ?>
然后您将使用以下 url: your-site.com/accounts/activate/your-email@email.com/your-token
路线代码必须放在/config/routes。php
更多详情见:https://book.cakephp.org/3.0/en/development/routing.html
在routes.php
(Laravel < 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 class 并调用方法 'activate' 这是第一个参数,然后提供该方法以数组形式接收的参数列表。
public function activate($email, $token)
{
echo "Email: $email"; // myemail@gmail.com
echo "Token: $token"; // eb0d89ba7a277621d7f1adf4c7803ebc
// do stuff
}