[英]Laravel route optional parameter to controller
您好,请帮我解决以下问题,
在 Laravel 上 5.5
我有以下路线:
这个有效:
Route::delete('/delete-comment/{id}', 'CommentController@destroy');
这个不起作用,因为我使用与上述路线相同的方法并且没有不需要的第一个参数're_id':
Route::delete('/your-template/{re_id}/delete-comment/{id}', 'CommentController@destroy');
该方法是:
public function destroy($id)
{
//do something
}
我想对子路由“re_id”使用不带第一个参数的相同方法。
我不需要这种解决方案,因为我想对两条路线使用相同的 function。
public function destroy($re_id= '' $id)
{
//do something
}
有没有办法忽略路线上的第一个参数're_id'或更通用的方法在路线的第一个片段上使用 slug ,例如:
哪个顺便说一句不起作用:
Route::delete('/{slug?}/delete-comment/{id}', 'CommentController@destroy');
在 PHP 中,通常可选参数必须在末尾......
例如,这将在 PHP v7.1^ 中导致致命错误
function test($first = null, $second)
{
echo $first .' '.$second;
}
test('string');
在你的情况下,我会这样尝试(不确定它是否有效)
Route::delete('/delete-comment/{id}/{slug?}', 'CommentController@destroy');
public function destroy($id, $re_id = null)
{
//do something
}
如果有人卡在这上面,我有一个解决方案:
1.- 创建一个配置文件 'route.php'
<?php
return [
'filters' => [
// Routes
'your-template/{re_id}/delete-comment/{id}',
'your-template/{re_id}/update-comment/{id}',
'article' => [
// Route arguments {name}
're_id',
]
]
];
2.- 使用以下命令创建中间件:
php 工匠制作:中间件 RouteArgumentsFilterMiddleware
<?php
namespace App\Http\Middleware;
use Closure;
class RouteArgumentsFilterMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$config = config('route.filters');
if (in_array($request->route()->uri, $config)) {
foreach ($config['article'] as $argument) {
$request->route()->forgetParameter($argument);
}
}
return $next($request);
}
}
3.- 在您的 web.php 文件中将中间件添加到所需的路由中:
Route::delete('/your-template/{re_id}/delete-comment/{id}', 'CommentController@destroy')->middleware('param_filter');
Route::put('/your-template/{re_id}/update-comment/{id}', 'CommentController@update')->middleware('param_filter');
4.- 运行 composer dump-autoload
然后发送到 controller 时将忽略所需的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.