Laravel惯性动态形式验证

Laravel惯性动态形式验证,laravel,forms,validation,dynamic,inertiajs,Laravel,Forms,Validation,Dynamic,Inertiajs,我有一个按钮,单击该按钮时,会向表单添加一些输入: <a @click="addNewText()" class="items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:

我有一个按钮,单击该按钮时,会向表单添加一些输入:

<a @click="addNewText()" class="items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:border-gray-900 focus:shadow-outline-gray transition ease-in-out duration-150">
    <i class="far fa-2x fa-plus-square"></i>
</a>

我正在使用Laravel 8和惯性,希望验证我的表单。当我尝试验证时,表单输入不会显示在$request->input('text');如果表单为空。如果填写了表单输入,那么它们会出现吗

这是我的控制器代码:

public function index()
{
    $texts = [];
    $texts = collect(
        [
            ['skill_level' => null, 'word_count' => null, 'title' => null, 'description' => null, 'category' => null]
        ]
    );
    //dd($texts->toJson());
    //return the view
    return Inertia::render('Client/OrderFormBuilder/GiantIndex', [
        "allTexts" => $texts->toJson()
    ]);
}

public function setOrderDetails(Request $request)
{
    $texts = $request->input('texts.*');
    $rules = [];
    $messages = [];

    for ($i = 0; $i < count($texts); $i++) 
    {
        $rules['texts[' . $i . '][skill_level]'] = 'required';
        $rules['texts[' . $i . '][word_count]'] = 'required';
        $rules['texts[' . $i . '][category]'] = 'required';
        //$rules['texts.' . $i . '.title'] = 'required|string|min:5|max:10000';
        //$rules['texts.' . $i . '.description'] = 'required|string|min:10|max:10000000';
    }

    for ($i = 0; $i < count($texts); $i++) 
    {
        $messages['texts[' . $i . '][skill_level].required'] = 'Please Enter Your Desired Skill Level.';
        $messages['texts[' . $i . '][word_count].required'] = 'Please Enter Your Desired Word Count.';
        $messages['texts[' . $i . '][category].required'] = 'Please Enter Your Desired Category.';
        /*
        $messages['texts.' . $i . '.title.required'] = 'A Title Is Required For Your Text.';
        $messages['texts.' . $i . '.title.string'] = 'Please Enter A Valid Title For Your Text.';
        $messages['texts.' . $i . '.title.min'] = 'Please Enter A Minimum Of 5 Characters For Your Title.';
        $messages['texts.' . $i . '.title.max'] = 'Please Enter A Maximum Of 10000 Characters For Your Title.';
        $messages['texts.' . $i . '.description.required'] = 'A Description Is Required For Your Text.';
        $messages['texts.' . $i . '.description.string'] = 'Please Enter A Valid Description For Your Text.';
        $messages['texts.' . $i . '.description.min'] = 'Please Enter A Minimum Of 10 Characters For Your Description.';
        $messages['texts.' . $i . '.description.max'] = 'Please Enter A Maximum Of 10000000 Characters For Your Description.';
        */
    }

    //dd($texts, $rules, $messages);

    Validator::make($texts, $rules, $messages)->validateWithBag('updateOrderFormBuilder');
}
公共功能索引()
{
$text=[];
$text=收集(
[
['skill\u level'=>null,'word\u count'=>null,'title'=>null,'description'=>null,'category'=>null]
]
);
//dd($text->toJson());
//返回视图
返回惯性::render('Client/OrderFormBuilder/GiantIndex'[
“所有文本”=>$text->toJson()
]);
}
公共函数setOrderDetails(请求$Request)
{
$text=$request->input('text.*');
$rules=[];
$messages=[];
对于($i=0;$ivalidateWithBag('updateOrderFormBuilder');
}
以下是我的Vue表单模板代码:

<div v-for="(singleText, index) in form.texts" v-bind:key="index" class="shadow sm:rounded-md sm:overflow-hidden mt-5">
<div class="bg-white py-6 px-4 space-y-6 sm:p-6">
    <div class="col-span-6 sm:col-span-4">
        <div>
            <label class="block font-medium text-sm text-gray-700" for="skill_level">Skill Level</label>
            <input :id="'skill_level_' + index" :name="'texts[' + index + '][skill_level]'" type="text" class="form-input rounded-md shadow-sm mt-1 block w-full" v-model="singleText.skill_level" :autocomplete="'texts[' + index + '][skill_level]'" />
            <div v-if="form.error('texts[' + index + '][skill_level]')">
            <p class="text-sm text-red-600">
                {{ form.error('texts[' + index + '][skill_level]') }}
            </p>
            </div>
            <label class="block font-medium text-sm text-gray-700" for="word_count">Word Count</label>
            <input :id="'word_count_' + index" :name="'texts[' + index + '][word_count]'" type="text" class="form-input rounded-md shadow-sm mt-1 block w-full" v-model="singleText.word_count" :autocomplete="'texts[' + index + '][word_count]'" />
            <div v-if="form.error('texts[' + index + '][word_count]')">
            <p class="text-sm text-red-600">
                {{ form.error('texts[' + index + '][word_count]') }}
            </p>
            </div>
            <label class="block font-medium text-sm text-gray-700" for="category">Category</label>
            <input :id="'category_' + index" :name="'texts[' + index + '][category]'" type="text" class="form-input rounded-md shadow-sm mt-1 block w-full" v-model="singleText.category" :autocomplete="'texts[' + index + '][category]'" />
            <div v-if="form.error('texts[' + index + '][category]')">
            <p class="text-sm text-red-600">
                {{ form.error('texts[' + index + '][category]') }}
            </p>
        </div>
    </div>
</div>

技能水平

{{form.error('text['+index+'][skill_level]')}

字数

{form.error('text['+index+'][word_count]')}

类别

{{form.error('text['+index+'][category]')}

最后,以下是我的Vue代码:

props: ['allTexts'],

    data: function() {
        return {
            showingNavigationDropdown: false,
            text: {
                skill_level: null,
                word_count: null,
                title: null,
                description: null,
                category: null,
            },
            form: this.$inertia.form({
                '_method': 'POST',
                texts: [],
            }, {
                bag: 'updateOrderFormBuilder',
                resetOnSuccess: false,
            }),    
        }
    },

    mounted: function () {
        this.form.texts = JSON.parse(this.allTexts); //this.allTexts;
        console.log(this.form.texts);
    },

    methods: {
        switchToTeam(team) {
            this.$inertia.put(route('current-team.update'), {
                'team_id': team.id
            }, {
                preserveState: false
            })
        },

        logout() {
            axios.post(route('logout').url()).then(response => {
                window.location = '/';
            })
        },

        submit() {
            this.$inertia.post(route('create-new-order.set-order-details-by-form', this.form), {
                preserveScroll: true
            })
        },
        
        addNewText() {
            if(this.form.texts.length < 20)
            {
                this.form.texts.push(this.text);
                
                console.log(this.form.texts, this.text);
            }
        },

        removeText: function(index) {
            if(this.form.texts.length > 1)
            {
                this.form.texts.splice(index, 1);
            }         
        }
    }
props:['alltext'],
数据:函数(){
返回{
显示导航下拉列表:false,
正文:{
技能等级:空,
字数:空,
标题:空,
description:null,
类别:空,
},
表格:这个。$INITORY.form({
"方法":"发布",,
案文:[],
}, {
包:“updateOrderFormBuilder”,
resetOnSuccess:false,
}),    
}
},
挂载:函数(){
this.form.text=JSON.parse(this.alltext);//this.alltext;
console.log(this.form.text);
},
方法:{
开关图腾(团队){
此.$INITORY.put(路线('current-team.update'){
“团队id”:team.id
}, {
保存状态:false
})
},
注销(){
post(路由('logout').url())。然后(响应=>{
window.location='/';
})
},
提交(){
此.$INTIRITY.post(路线('create-new-order.set order details by form'),此.form){
保存卷轴:正确
})
},
addNewText(){
if(this.form.text.length<20)
{
this.form.text.push(this.text);
console.log(this.form.text,this.text);
}
},
removeText:函数(索引){
如果(this.form.text.length>1)
{
本.表格.文本.拼接(索引,1);
}         
}
}

为什么,当我点击提交按钮时,$request->input('text.*');不工作?当表单为空时,它始终不显示任何内容,仅在表单中填写输入内容时显示输入内容?

我认为您需要使用并发送表单文本数据。请注意,惯性.post()使用了不同的参数

是否应该在某个地方有一个
Request::validate
定义?欢迎来到堆栈溢出!我建议不要在回答中使用修辞问题。他们有可能被误解为根本没有答案。你想回答本页顶部的问题,是吗?否则请删除此帖子。