Search code examples
phplaravelroutesurl-routingmultiparameter

How we use laravel URL with multiple parameters? Is it necessary to specify each parameter as method argument?Can't we access them through Request?


For the time being, I'm trying to use a URL with multiple parameters this way. For example, I'd pass employee ID, Group ID and current status of the employee in URL using the following pattern. mydomain.com/en/employee/benefit-status/1-1-enroll

The Route I've defined is as follows:

Route::get('{lang}/employee/benefit-status/{slug}', 'EmployeeBenefitController@create');

In my controller method, I'm accessing the parameters separately. create($lang,$slug)

This route is working fine. When I try to access the parameters through Request object:

create(Request $request)

Route works fine too but in this case when I try to navigate to any other page.

e.g. If I click a menu item with this link "mydomain.com/en/candidates

The URL get messed up and look something like this:

http://hrm.test:8080/GET%20/en/employee/benefit-status/1_1_enroll%20HTTP/1.1Accept:%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding:%20%20%20%20%20%20%20%20%20%20%20gzip,%20deflateAccept-Language:%20%20%20%20%20%20%20%20%20%20%20en-US,en;q=0.9Connection:%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20keep-aliveContent-Length:%20%20%20%20%20%20%20%20%20%20%20%20Content-Type:%20%20%20%20%20%20%20%20%20%20%20%20%20%20Cookie:%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20laravel_token=eyJpdiI6IktcL0tjd3REZnVoXC82c0lsTUZRUXp5Zz09IiwidmFsdWUiOiJyUlRBTU1ueUt5WHl0TUdSYURvMDRTaDFFN2ZwQ1RzTEl5Q2VQVjA5ODc3WEp3WkZBa2pudHkwOERjQzdsdFI5Y3k3c1hqMjMyOXJNeXdLK1VmZXVZSnhIYzF2MDM4ZDVld1JtMlBjU01XWDEzY3RyclBTcHFEQ0FIMmNpYWkrT1dIcDFLTHVTVFpxU3h3TE9QVXlCd1hCMXUyUzRVWDVHM2ZiNVFiQ1JrTmJXM292ZEVrVjBHVmZtaUZcLzV1U1lhMWdySk1pTXhwblcyY0Jxck1lK2lFOXFXb0plc2pCSTlLR083eGlPWXptN3hDMDEwZFlwbHF2clZ6dDQ4XC96ZzkiLCJtYWMiOiIyNzgxOGU4MGM1YzM1YjI1MTFkNzY1N2ZhZTg3Y2E4MDlmZDQwNTEyMjAwMjdjMTQxNjM5YzhjMDMwMzY1Yjk5In0%3D;%20XSRF-TOKEN=eyJpdiI6InNVRkUzeXB5ZVJaQTM5WmJxNmR1R2c9PSIsInZhbHVlIjoiN1dONmVuRU1QRytaQmR4bzZSR1dDVXJKRVptVTdzb0JwajNzMkNFRU1tVUJJc3EwMmpzMms4S3BoclFqbkJ1MCIsIm1hYyI6ImVmZDIxNDA1OGVlY2FmZDkxODg5ZTRkMzE0OWM2NTJlZjYyNjFhNDBmOTk2NzU1M2I0NWZlODM5OGZiMDcyNjgifQ%3D%3D;%20hrm_session=eyJpdiI6IjNjS2Vja1ZDVVpKUlU4YkxYdlwvbzNnPT0iLCJ2YWx1ZSI6IndCZ0VPZk9OXC9cL01SUGo5VEMwZVJEM0R5VnI0SDBLV1lVWldJemZkODVRRG1yTXpxeXBSdzc4ZUcyMzJ1VnlabiIsIm1hYyI6ImY1NWQ3MGFkYzZjNTljZjVmYzJhMWU5MjRkZjJiN2NhODk0ZTgxNjY3YWZmMjIzYzAzNDFlYWYyNzg0YmI2NjUifQ%3D%3DHost:%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hrm.test:8080Upgrade-Insecure-Requests:%201User-Agent:%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/79.0.3945.117%20Safari/537.36Cookie:%20laravel_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjEsImNzcmYiOiJvSkwzTkVmUEtQZUVWNlhnWVZ4UnNIZm13U2wwcGFjVkNrb0ZQNGtDIiwiZXhwaXJ5IjoxNTc5MzYxMzA2fQ.x1ibu7gHOIMgD73fXs90EdtHnLMb5J4cbgg3uDVYc8s;%20XSRF-TOKEN=oJL3NEfPKPeEV6XgYVxRsHfmwSl0pacVCkoFP4kC;%20hrm_session=MxkRkbJhiLlByPZncb6JqL87ATK0MH8mDLHhKIGg/candidates

Solution

  • Much better if you wrote your route like this

    Route::get('{lang}/employee/benefit-status/{employeeID}/{GoupPlanID}/{status}', 'EmployeeBenefitController@create');
    

    The URL get messed up maybe because you didn't used the route in a correct way by providing wrong data.

    I prefer to do it in post request since you are inserting this data i guess.