Laravel表格不起作用:未调用控制器

时间:2019-02-11 12:26:39

标签: laravel forms

这个问题已经困扰了我几个小时,所以希望你们中的一些人能够提供帮助。预先感谢。

问题很简单:当我单击表单的“提交”按钮时,什么也没有发生。就像,什么都没有。没有错误,没什么。 在开始开发表单之前,我已经通过创建行为创建了消息模型

php artisan make:model Message --resource

因此,我已经创建,存储等方法。已经完成并准备就绪(感谢工匠!)。 在我的路线web.php路线文件中,我有:

Route::resource('Message','MessageController');

这应该自动链接所有方法,对吧?

无论如何,我的表单是:

{!!  Form::open(['action' => 'MessageController@store', 'method' => 'POST']) !!}
                                    <ul class="row">
                                        <li class="col-sm-6">
                                            <label>{{Form::label('name','Name')}}</label>
                                                {{Form::text('name', '', ['class' => 'form-control'])}}
                                        </li>
                                        <li class="col-sm-6">
                                            <label>{{Form::label('email','Email')}}</label>
                                                {{Form::text('email', '', ['class' => 'form-control', 'placeholder' => 'Your email'])}}
                                        </li>
                                        <li class="col-sm-12">
                                            <label>{{Form::label('message','Message')}}</label>
                                                {{Form::textarea('message','', ['class' => 'form-control'])}}
                                        </li>
                                        {{Form::submit('Submit', ['class' => 'btn-round'])}}

                                    </ul>
                                    {!! Form::close() !!}

和我的MessageController @ store看起来像这样:

 public function store(Request $request)
    {
        $this -> validate($request, [
            'name' => 'required',
            'email' => 'required',
            'message' => 'required'
            ]
            );

        $message = new Message();
        $message -> name= $request -> input('name');
        $message -> email= $request -> input('email');
        $message -> text= $request ->input('text');
        $message -> user_id = Auth::user()->id;

        $message->save();

        return redirect('/');
    }

该控制器似乎无法正常工作,因为即使我取消了验证,也没有任何反应。我不知道我在做什么错!

2 个答案:

答案 0 :(得分:0)

您必须使用路线。

在HTML中:

<form method="post" action="{{url('login')}}" accept-charset="UTF-8">

在route / web.php中:

Route::post('login','WelcomeController@log_in');

答案 1 :(得分:0)

好吧,首先通过运行以下命令确保正确定义了路由:

php artisan route:list

您应该看到一个表格,其中列出了所有带有其名称,路由,控制器的路由。 您应该会看到Message的6条路线,我们现在正在寻找的路线是“ message.store”

我看到您正在使用laravel Collector来渲染表单,您确定其渲染正确吗?它是否使用正确的表单操作路线和正确的textareas名称来呈现DOM元素?只需从浏览器中检查即可。

如果没有,您可以尝试使用简单的刀片视图:

<form method="POST" action = "{{ route('message.store') }}">
<!-- include CSRF token as the following -->
@CSRF
@if ($errors->has('name'))
            <span class="invalid-feedback">
        <ul>
            @foreach($errors->get('name') as $error)
            <li>
                {{ $error }}
            </li>
            @endforeach
<input name="name">
@if ($errors->has('name'))
            <span class="invalid-feedback">
        <ul>
            @foreach($errors->get('email') as $error)
            <li>
                {{ $error }}
            </li>
            @endforeach
        </ul>
            </span>
        @endif
<input name="email">
@if ($errors->has('name'))
            <span class="invalid-feedback">
        <ul>
            @foreach($errors->get('message') as $error)
            <li>
                {{ $error }}
            </li>
            @endforeach
        </ul>
            </span>
        @endif
<input name="message">
<submit />
</form>

然后确保从DevTools>网络触发了发布请求。