我需要基于中间件为同一网址调用不同的控制器。 url必须相同,因此不能在中间件中进行重定向。下面的代码是示例,用于路由的数十个控制器已经完成,因此检查会话值也没有选择。
试图创建两个不同的中间件(具有/具有会话值),但是后一个路由组仍然会覆盖前一个。有什么线索吗?也许需要其他方法吗?
route.php 看起来像这样:
Route::group(array('namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'auth'), function () {
// set of default routes
Route::get('/', array('as' => 'admin', 'uses' => 'FirstController@index'))->middleware('admin');
Route::get('/profile', array('as' => 'profile', 'uses' => 'FirstController@profile'))->middleware('admin');
Route::group(array('middleware' => 'sessionhassomething'), function () {
// set of the same routes like above but overwritten if middleware validates
Route::get('/', array('as' => 'admin', 'uses' => 'SecondController@index'))->middleware('admin');
Route::get('/profile', array('as' => 'profile', 'uses' => 'SecondController@profile'))->middleware('admin');
});
});
SessionHasSomething 中间件:
class sessionHasSomething {
public function handle($request, Closure $next)
{
if(session()->has("something_i_need_to_be_set")) {
return $next($request);
}
// return what if not set, or ...?
}
}
谢谢!
答案 0 :(得分:1)
如果您仅检查else
是否可行,则可以使用路由闭包在路由中添加需要动态的条件。
下面是一个示例:
session()->has('something')
Route::get('/', function() {
$controller = session()->has('something')) ? 'SecondController' : 'FirstController';
app('app\Http\Controllers\' . $controller)->index();
});
是控制器类中的方法。
答案 1 :(得分:0)
我们几乎遇到了同样的问题,这就是我所做的。 (我没有使用中间件)。
在我的SELECT monthname, description
FROM (VALUES
(1, 'January'),
(2, 'February'),
(3, 'March'),
(4, 'April'),
(5, 'May'),
(6, 'June'),
(7, 'July'),
(8, 'August'),
(9, 'September'),
(10, 'October'),
(11, 'November'),
(12, 'December')
) AS va(monthnumber, monthname)
LEFT JOIN yourdata ON DATEPART(MONTH, fdate) = va.monthnumber
ORDER BY monthnumber
中,我使用了blade.php
,@if
和@else
@endif
您也可以在控制器中执行此操作,使用<?php
use App\Models\User;
$check = User::all()->count();
?>
@if ($check == '0')
// my html/php codes for admin
@else
// my html/php codes for users
@endif
,if
。