skip to Main Content

That is maybe a dumb question or asked many times (if so, answer with existing link and I will close this post).

Let’s say in laravel by example, when send model id in route, everything is ok in php. But when a route must optional parameter defined as null in Vuejs (or undefined), Php gets this parameter as string.

//vuejs in methods:
myFunction(id1, id2 = null) {
  axios.post(`/api/model1/${id1}/model2/${id2}`)
    .then((response) => {
        console.log(response);
    })
    .catch(err => {
        console.log(err);
    });
 },

And

//Laravel routes/api.php for my api
Route::post('model1/{id}/model2/{id2}', 'SomeController@doThis');

Example: myapi/model1/{id1}/model2/{id2} and
myapi/model1/987/model2/null

So I get ‘null’ here for model2. (sometimes it is ‘undefined’ according to the situation)

What is the better way to deal with it?
without adding regex for my parameters? because I do not need regex for the first param what is id1.

I try to deal with it many times, but it seems I always come back to this problem from time to time. I need to keep this in my mind once for all.

2

Answers


  1. You should do null checks when constructing the URL:

    //vuejs in methods:
    myFunction(id1, id2 = null) {
      axios.post(`/api/model1/${id1}/model2${id2 ? `/${id2}` : ''}`)
        .then((response) => {
            console.log(response);
        })
        .catch(err => {
            console.log(err);
        });
     },
    

    You should also make the 2nd parameter optional:

    Route::post('model1/{id}/model2/{id2?}', 'SomeController@doThis');
    
    Login or Signup to reply.
  2. How making the your laravel route parameter as an optional :
    Optional Parameter

    Route::post('model1/{id}/model2/{id2?}', 'SomeController@doThis');
    

    add the ? at the model2 parameter.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search