Laravel только один из двух доступных маршрутов одновременно

<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

Я инициализировал свой PersistenceContext.xml в <context-param>, потому что все мои сервлеты будут взаимодействовать с базой данных в рамках MVC.

Howerver,

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:ApplicationContext.xml
        </param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.organisation.project.rest</param-value>
    </init-param>
</servlet>

в вышеупомянутый код, я настраиваю трикотаж и ApplicationContext.xml только для слоя отдыха. Для этого я использую </init-param>

0
задан Davit 13 July 2018 в 16:25
поделиться

2 ответа

Если вы хотите, вы можете просто сделать переадресацию со своего промежуточного программного обеспечения:

if (something in my database have status == 0) {
    return redirect()->route('route_a_name');
} else {
    return redirect()->route('route_b_name');
}

Просто убедитесь, что вы назовете свои маршруты в своем routes/web.php.

Пример:

Route::get('/route_a', 'YourController@RouteA')->name('route_a_name');

Редактирование:

На основании дополнительной информации, которую вы предоставили, промежуточное программное обеспечение для того, что вы пытаетесь достичь, является скорее сверху. Вместо этого вы можете просто использовать один маршрут и передать параметр статуса. Для получения дополнительной информации о параметрах маршрутизации см. https://laravel.com/docs/5.6/routing#route-parameters .

Пример:

Route::get('/your_route/{status}', 'YourController@ControllerAction');

Затем в контроллере обработайте логику, основанную на статусе:

function ControllerAction(Request $request, $status) {
    if ($status == 0) {
        //Show view for A
    } else {
        //Show view for B
    }
}
2
ответ дан JPark 17 August 2018 в 12:27
поделиться
  • 1
    Я не хочу, чтобы маршруты были доступны через url, и не проверяет условие. Поэтому я не хочу просто добавлять маршруты в web.php и позволять им свободно обращаться – Victordb 13 July 2018 в 16:40
  • 2
    Зачем использовать промежуточное ПО? Почему не только один маршрут и статус? например Route::get('/your_route/{status}', 'YourController@YourAction') – JPark 13 July 2018 в 16:49
  • 3
    – Victordb 13 July 2018 в 17:50
  • 4
    Обновлено. Благодарю. – JPark 13 July 2018 в 18:11

Вы можете использовать имя маршрута и просто использовать его где угодно.

  //define route
  Route::get('/A', 'ControllerA@methodA')->name('A');
  Route::get('/B', 'ControllerB@methodB')->name('B');

В вашем контроллере просто используйте имя маршрута

   $routeName = ['A','B']; //route name
   If (something in my database have status == 0) {
     return Redirect::route($routeName[0]); //ROUTE A
   } else {
      return Redirect::route($routeName[1]); //ROUTE B
   }

В противном случае вы можете сделать что-то, получая параметр группы маршрутов

  Route::group(['prefix' => '/test/{id}'], function() {
   //you can't access parameter directly here 
    $id = explode('test/',url()->current())[1]; //get parameter with different way
    if($id == 1){
       exit('do something');
    }else{
        exit('do others');
    }
 });
3
ответ дан MD NASIR FARDOUSH 17 August 2018 в 12:27
поделиться
  • 1
    У меня, вероятно, не было бы массива имен маршрутов, это просто добавляет слой сложности. Если у вас много маршрутов, просто напишите их вместо массива. – JustCarty 13 July 2018 в 16:35
  • 2
    – MD NASIR FARDOUSH 13 July 2018 в 16:41
  • 3
    Я не хочу, чтобы маршруты были доступны через URL-адрес, если условие не проверено. Поэтому я не хочу просто добавлять маршруты в web.php и позволять им свободно получать доступ. Мне нужна инструкция if в //define routes. Я не знаю, как получить доступ к параметру из других маршрутов в инструкции if. – Victordb 13 July 2018 в 16:41
  • 4
    @Victordb Я не уверен, что вы хотите что-то вроде этого «Route :: get ('/ route / {id}', function ($ id) {if ($ id == 1) {// сделать что-то} else { // делать другие}}); – MD NASIR FARDOUSH 13 July 2018 в 16:50
  • 5
    Да, но по какой-то причине я не могу использовать его в Route::group(['prefix' => '/'], function($id). – Victordb 13 July 2018 в 16:56
Другие вопросы по тегам:

Похожие вопросы: