Tengo una llamada axios bastante simple dentro de un componente vue donde tomo una matriz de los datos y la envío a través de la URL de publicación a una clase php que está tratando de trabajar con ella. El problema actual es que cuando llega a la función php, obtengo un error de conversión de matriz a cadena, aunque siento que la estructura es correcta dentro del objeto de datos en vue.
La función Tne php es:
public function testStores( array $stores = null){ $storeTest = empty($stores) ? '' : "STORES:".implode(',',$stores). "; } Implode no funciona aquí debido al problema de matriz a cadena, pero espero que $storeTest me dé "5, 10" en este caso. Solo una cadena separada por comas hecha a partir de los ID.
¿Qué he hecho mal?
ACTUALIZACIÓN: estoy descargando la matriz ahora, justo antes de llamar a la función de implosión, y esto es lo que se imprime:
array:2 [ 0 => array:1 [ "id" => "5" ] 1 => array:1 [ "id" => "10" ] ] var vm = new Vue({ el: "#app", data: { stores: [ {id: "5"}, {id: "10"} ] }, methods: { getStores(){ axios({ method: 'post', url: test, data: { stores: this.stores } }).then(function (response) { }).catch(function (error) { }); } } }) <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <button @click="getNames()">TEST</button> </div>Está enviando una estructura complicada a través del backend que tiene que masajear para que pueda implosionar. Aquí se explica cómo masajearlo en una matriz plana.
<?php // This is the data coming from the front end. $post = '{ "stores":[ { "id":"5" }, { "id":"10" } ] }'; // Decode it into an array $input = json_decode($post, true); // You now have an array that looks like this, // Array // ( // [stores] => Array // ( // [0] => Array // ( // [id] => 5 // ) // [1] => Array // ( // [id] => 10 // ) // ) // ) // Grab the sub-array from under `stores`. $idList = $input['stores']; // You now have an array that looks like this, // Array // ( // [0] => Array // ( // [id] => 5 // ) // [1] => Array // ( // [id] => 10 // ) // ) // You have to now flatten the array so that you have a single list of IDs like, [5, 10] // You can use this, https://stackoverflow.com/a/8755001/296555 $flatArray = array_map('current', $idList); // Now you can pass that to your function, function testStores( array $stores = null) { return empty($stores) ? '' : "STORES:".implode(',',$stores); } echo testStores($flatArray);Como señala @ADyson, sería mejor que el front-end pasara una lista simple al back-end. Intenta que pase algo como,
data: [5,10]
Puede pasar eso directamente a su función después de json_decoding it.