Указание пути модели ресурсов для определенного промежуточного программного обеспечения
Впервые столкнулся с этой проблемой.
В основном у меня есть маршрут в моем файле web.php:
Route::GET('addThumbnailImage/{model}/{id}', 'AssetsController@addThumbnailImage');
Также у меня есть AssetController:
public function addThumbnailImage($model,$id){
$model_name = $model;
if ($model == 'venue'){
$model = Venue::where('id',$id)->first();
} else {
$model = Asset::where('id',$id)->first();
}
$mainContent = view('spaceProvider.addThumbnailImage', compact('model','model_name'));
$sidebar = HomeController::allUserSidebar();
return view('_layouts.userMaster', compact('mainContent', 'sidebar'));
}
и в AssetContoroller у меня есть:
public function __construct(){
$this->middleware('assets')->except('addGalleryImages', 'addThumbnailImage');
}
Моя главная проблема во всем этом заключается в том, что я не могу определить в URL:
(Route::GET('addThumbnailImage/{model}/{id}', 'AssetsController@addThumbnailImage'); )
если {модель}=='место проведения' это будет использовать контроллер места
Route::GET('addThumbnailImage/{model}/{id}', 'VenueController@addThumbnailImage');
и если {модель}=='актив', он будет использовать AssetController
Route::GET('addThumbnailImage/{model}/{id}', 'AssetsController@addThumbnailImage');
Я пытался сделать несколько функций в моем веб-маршруте, но ничего не получалось.
Я также попытался идентифицировать в контроллере, поскольку я не мог идентифицировать {модель}, чтобы перейти к другому контроллеру, если он ='ToSomethingElse', я пошел к контроллеру, чтобы поиграться с:
public function __construct(){
$this->middleware('auth');
$this->middleware('assets')->except('addGalleryImages', 'addThumbnailImage');
}
Я пытался сделать что-то глупое, как это:
public function __construct($model){
if($model =='asset'){
$this->middleware('auth');
$this->middleware('assets');
}
else{
$this->middleware('auth');
$this->middleware('venue');
}
}
но НИЧЕГО, кажется, не работает.
Я пробежал через Laravel Route и Документацию по контроллеру и не нашел ничего подобного.
Главное, если вы используете несколько каталогов /{path}/{model}/{id}, вы можете использовать разные контроллеры для каждого из них.
В случае, если невозможно сделать что-то подобное, вот мой код для промежуточного ПО, так как промежуточное ПО не работает, когда я перехожу к:
Http: // **********: 8000 / addThumbnailImage / место /7
или же
Http: // **********: 8000 / addThumbnailImage / актив /7
он либо не позволяет мне перейти к нужному месту или активу, либо позволяет мне перейти к активу или месту somebody, которые не назначены моему user_ID
Вот мой код промежуточного программного обеспечения:
public function handle($request, Closure $next)
{
$url = explode('/',$request->fullURL());
$model_id = end($url);
// Venue is authorise if the user has assigned Venues to his ID
$asset = Asset::with('venue')->where('id', $model_id)->first();
if($asset == null){
return response(view('pages.forbidden'));
}
if($asset->venue->user != Auth::user()){
// Either one works, I prefer the return view one because
// then we can eliminate the forbidden route from the routes file
// return redirect('forbidden');
return response(view('pages.forbidden'));
}
return $next($request);
}
Эти отношения работают нормально для актива -> место проведения -> пользователя, но это не работает для мест, где я блокирую переход на назначенное http://**********:8000/addThumbnailImage/ место проведения /11 ПОЛЬЗОВАТЕЛЮ
но он хорошо работает для пользователя http://**********:8000/addThumbnailImage/asset/7
Есть отношения: User_id = 11;
имеет место проведения = 11;
и Актив =7;
так что в основном это должно позволить мне пройти через http://**********:8000/addThumbnailImage/venue/11 и как это работает для: http://**********:8000/addThumbnailImage/ актив /7
Пожалуйста, помогите мне:)))
Заранее большое спасибо, если кому-то удастся разобраться в моей проблеме.
1 ответ
У вас не должно быть нескольких маршрутов с одинаковой структурой URL, потому что Laravel не знает, какой из них вы хотите использовать. Лучше разделить маршруты:
Route::get('addThumbnailImage/venue/{id}', 'VenueController@addThumbnailImage');
Route::get('addThumbnailImage/asset/{id}', 'AssetController@addThumbnailImage');
Если вы разделяете их, то вы всегда знаете, какой контроллер будет использоваться, и вам не нужно проверять внутри конструктора контроллера, чтобы увидеть, какое промежуточное программное обеспечение запустить.