質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

621閲覧

Laravel / Vuetify でフォーム画面作成

tktail

総合スコア72

Vuetify.js

Vuetify.jsは、マテリアルデザインを基本とするVue.jsのCSSフレームワークです。多くのマテリアルデザインのコンポーネントを提供しており、あらゆるアプリケーションに対応可能。vue-cli用テンプレートがあり、簡単にページを作成できます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/07/02 08:04

vuetifyでフォーム画面を作成しています。

ボタンを押すとモーダルウィンドウが開き、そこに表示されるフォームを入力。
送信ボタンをクリックすることによりDBに保存を実現したいです。

一連の動作を以下のようにコンポーネント化して読み込んでいます。

TestComponent

1 2<template> 3 <v-row justify="center"> 4 <v-dialog 5 v-model="dialog" 6 max-width="600px" 7 > 8 9 <template v-slot:activator="{ on, attrs }"> 10 <v-btn 11 color="blue darken-1" 12 dark 13 depressed 14 small 15 v-bind="attrs" 16 v-on="on" 17 > 18 投稿 19 </v-btn> 20 </template> 21 22 <v-card> 23 24 <v-card-text> 25 <v-container> 26 <form action="user_post" method="post"> 27 28 <!--csrfトークン--> 29 <input type="hidden" name="_token" :value="csrf"> 30 31 <v-select 32 v-model="select" 33 :items="attributes" 34 :rules="[v => !!v || 'Item is required']" 35 label="タグ*" 36 name="attributes" 37 required 38 ></v-select>   39 40 <v-text-field 41 label="タイトル*" 42 hint="見出しを設定しましょう。" 43 name="title" 44 persistent-hint 45 required 46 ></v-text-field> 47 48 <v-textarea 49 label="内容*" 50 hint="コンテンツを投稿しましょう。" 51 name="knowledge" 52 persistent-hint 53 required 54 ></v-textarea> 55 56 </form> 57 </v-container> 58 </v-card-text> 59 60 <v-card-actions> 61 <v-spacer></v-spacer> 62 <v-btn color="blue darken-1" text @click="submit">投稿</v-btn> 63 </v-card-actions> 64 65 </v-card> 66 </v-dialog> 67 </v-row> 68</template> 69 70<script> 71 72 export default{ 73 data: () => ({ 74 select: null, 75 attributes: [ 76 'テスト1', 77 'テスト2', 78 'テスト3', 79 ], 80 dialog: false, 81 }), 82 } 83 84</script> 85

なお、Laravelのコントローラー側は以下のように記述

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use DB; use App\HOGEMODEL; class HOGEController extends Controller { public function store(Request $request){ HOGE::create($request->all()); return redirect('/'); } }

現在の挙動としては、送信ボタンを押しても何も動作されません。
java scriptの知識が浅いこともあり、どなたかお力添え頂けますとうれしいです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

v-btnは
<button type='button'>として解釈されるためform送信には適しません

投稿2020/07/02 08:26

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tktail

2020/07/03 07:09

ご回答ありがとうございます。 <input type="submit" class="btn btn-primary">に変更し、form内に入れることによってとりあえずは次の画面に行きました。 次の画面で419エラーが出ますので、csrf対策の見直しをする予定ですが、component内で@csrfは使えませんし、解決方法はありますでしょうか?
mikkame

2020/07/03 07:27

metaにcorsをトークンを埋め込んでおく というのが一般的に使われています。 (ajaxの場合) ajaxで送信するか form送信の場合ならコンポーネント内でheadのmetaタグからcorsを探してくるような感じにしてinput hiddenにぶち込めばいいと思います
tktail

2020/07/04 03:09

ありがとうございます。 metaには<meta name="csrf-token" content="{{ csrf_token() }}">の記述がありまして。 コンポーネントファイルには <input type="hidden" name="_token" :value="csrf">ということで dataプロパティに csrf: document.querySelector('meta[name="csrf-token"]').getAttribute('content') を追記してみました。 しかし、動きません。。。 この場合、どのあたりを見直せばよろしいでしょうか? csrf部分をslotにして@csrfを埋め込んだら動きますが、スマートじゃない気がして。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問