Указание пути модели ресурсов для определенного промежуточного программного обеспечения

Впервые столкнулся с этой проблемой.

В основном у меня есть маршрут в моем файле 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');

Если вы разделяете их, то вы всегда знаете, какой контроллер будет использоваться, и вам не нужно проверять внутри конструктора контроллера, чтобы увидеть, какое промежуточное программное обеспечение запустить.

Другие вопросы по тегам