Übergeben Sie Daten von vue.js an Laravel 9
P粉951914381
2023-08-31 16:37:26
<p>Problem: Interner Serverfehler beim Übergeben von Daten von vue.js an Laravel mit axios</p>
<p>Ich habe ein neues Laravel-Projekt erstellt und Breece mit Vue installiert (PHP Artisan Breeze: Vue installieren). Dann habe ich einen Menü-Controller erstellt und menu.vue wie folgt gerendert: </p>
<pre class="brush:php;toolbar:false;">public function index()
{
$menuItems = Menu::all();
return Inertia::render('Menu', [
'menuItems' =>
]);
}</pre>
<p><code>Route::get('menu',[MenuController::class,'index']);
Jetzt habe ich CartController</p> erstellt.
<pre class="brush:php;toolbar:false;"><?php
Namespace AppHttpControllers;
verwenden Sie AppModelsCart;
verwenden Sie AppModelsMenu;
benutze IlluminateHttpRequest;
Die Klasse CartController erweitert Controller
{
öffentlicher Funktionsspeicher (Request $request)
{
dd("CONTROLLER");
$menu_id = $request->input('id');
$menu = Menu::find($menu_id);
$cart=new Cart();
$cart->table=$request->table;
$cart->menus_id=$menu_id;
$response=$cart->save();
}
}</pre>
<p>Hier muss ich die von menu.vue zurückgegebenen Daten speichern
menu.vue</p>
<pre class="brush:php;toolbar:false;"><script setup>
import { Head } from '@inertiajs/vue3';
</script>
<Vorlage>
<Head title="Menü"
<navbar />
<div
class="grid grid-cols-1 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-4 mx-20"
>
<div v-for="item in menuItems" :key="item.id">
<div class="p-6 bg-whiterounded-lgshadow-lg">
<img
v-bind:src="'menuItemImage/' + item.image"
class="w-12 h-12"
/>
<h3 class="text-lg Font-Medium Leading-tight">
{{ Artikelname }}
</h3>
<-Taste
@click="addToCart(item)"
class="mt-4 bg-blue-500 text-white py-2 px-4 abgerundet-lg hover:bg-blue-600"
>
Hinzufügen
</button>
</div>
</div>
</div>
</template>
<script>
Navbar aus „@/Layouts/NavbarLayout.vue“ importieren;
Axios aus „Axios“ importieren;
Standard exportieren {
Name: "Menü",
Daten() {
zurückkehren {};
},
Komponenten: {
Navigationsleiste,
},
Requisiten: ["menuItems"],
Methoden: {
addToCart(item) {
console.log(item.id);
Axios
.post("/cart", {
menu_id: item.id,
})
.then(Funktion (Antwort) {
console.log(response.data);
})
.catch(Funktion (Fehler) {
console.log(error);
});
},
},
};
</script></pre>
<p>问题是当这被调用时</p>
<pre class="brush:php;toolbar:false;">axios
.post("/cart", {
menu_id: item.id,
})</pre>
<p>它给了我这个错误:
错误</p>
<p>这是我的 app.js</p>
<pre class="brush:php;toolbar:false;">axios
import './bootstrap';
import '../css/app.css';
import { createApp, h } from 'vue';
import { createInertiaApp } from '@inertiajs/vue3';
import { discoverPageComponent } aus 'laravel-vite-plugin/inertia-helpers';
import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m';
const appName = window.document.getElementsByTagName('title')[0]?.innerText || „Laravel“;
createInertiaApp({
Titel: (Titel) => `${title} - ${appName}`,
lösen: (name) => discoverPageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')),
setup({ el, App, props, Plugin }) {
return createApp({ render: () => h(App, props) })
.use(Plugin)
.use(ZiggyVue, Ziggy)
.mount(el);
},
Fortschritt: {
Farbe: '#4B5563',
},
});</pre>
<p>这是我的app.blade.php</p>
<pre class="brush:php;toolbar:false;"><!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<Kopf>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title inertia>{{ config('app.name', 'Laravel') }}</title>
<!-- Schriftarten -->
<link rel="stylesheet" href="https://fonts.bunny.net/css2?family=Nunito:wght@400;600;700&display=swap">
<!-- Skripte -->
@routes
@vite(['resources/js/app.js', "resources/js/Pages/{$page['component']}.vue"])
@inertiaHead
</head>
<body class="font-sans antialiased">
@Trägheit
</body>
</html></pre>
<p>Dies befindet sich in der Speicher-/Protokolldatei<code>[2023-02-08 16:39:49] local.FEHLER: SQLSTATE[23000]: Verletzung der Integritätsbeschränkung: 1048 Spalte „menus_id“ darf nicht null sein (SQL: In </code>carts<code> einfügen (</code>menus_id<code>, </code>table<code>, </code>updated_at<code>, </code> ;created_at<code> ;) value(?, ?, 2023-02-08 16:39:49, 2023-02-08 16:39:49)) {"Exception":"[Object] (Illuminate\Database\QueryException (code: 23000 ): SQLSTATE[ 23000]: Verletzung der Integritätsbeschränkung: 1048 Spalte „menus_id“ darf nicht null sein (SQL: INSERT into </code>carts<code> (</code>menus_id<code>, < /code>table< ;code>, </code >updated_at<code>, </code>created_at<code>) Wert (?, ?, 08.02.2023 16:39:49, 08.02.2023 16:39 :49)) in D:\Trinity\7th SEM\Project Work\smart_QR_based_restaurant\Suppliers\laravel\Framework\src\Illuminate\Database\Connection.php:760) [stacktrace] </code> ;
这可能是你的问题,
您正在将此对象作为发布数据传递
然后你在控制器中调用一个不存在的输入
$request->input('id')
应该是
$request->input('menu_id');
但是,再次检查您的日志以查看引发的实际错误
此外,您应该在控制器中添加验证,以确保您传递的 ID 存在于表中