【问题标题】:Simple contact form not showing validation errors or sending the message简单的联系表格不显示验证错误或发送消息
【发布时间】:2015-09-02 17:24:57
【问题描述】:

我在 Laravel 5 中有一个简单的联系表单。如果我用空字段提交它,页面会重新加载,但它不会向我显示验证的错误消息。如果我填写表格并提交,我会收到此错误:

FileViewFinder.php 第 140 行中的 InvalidArgumentException:未找到查看 [emails.message]。

那是因为我没有这样的观点,我不知道该放什么,而且 Laravel 的文档在这个问题上也不清楚:

传递给 send 方法的第一个参数是应该用作电子邮件正文的视图的名称。

不知道这是什么意思。

路线

Route::get('contact','HomeController@contactus');
Route::post('contact_request', 'HomeController@contactRequest');

家庭控制器

public function contactus()
    {
        if (Auth::check()) {
            $count = Cart::count();
        } else {
            $count = 0;
        }

        $contact = Contact::all();

        return view('contact')->with('contact', $contact)->with('count', $count);
    }

public function contactRequest() {

        if (Auth::check()) {
            $count = Cart::count();
        } else {
            $count = 0;
        }

        $contact = Contact::all();

        //Get all the data and store it inside Store Variable
        $data = Input::all();

        //Validation rules
        $rules = array (
            'name' => 'required', 
            'email' => 'required|email',  
            'message' => 'required|min:5'
        );

        //Validate data
        $validator = Validator::make ($data, $rules);

        //If everything is correct than run passes.
        if ($validator -> passes()){

            Mail::send('emails.message', $data, function($message) use ($data)
            {
                //$message->from($data['email'] , $data['first_name']); uncomment if using first name and email fields
                $message->from('feedback@gmail.com', 'feedback contact form');
                //email 'To' field: cahnge this to emails that you want to be notified.
                $message->to('feedback@gmail.com', 'John')->cc('feedback@gmail.com')->subject('feedback form submit');

            });
            // Redirect to page
            return view('contact')
                ->with('message', 'Your message has been sent. Thank You!');


            //return View::make('contact');
        }else{
            //return contact form with errors
            return view('contact')
                ->with('error', 'Feedback must contain more than 5 characters. Try Again.')
                ->with('contact', $contact)
                ->with('count', $count);
        }
    }

查看

<h1 class='siteh1'>Contact Us</h1> 
<hr class='sitehr'/>
<div class="col-md-6 siteleft">
<h2 class='siteh2'>Contact Info</h2>
<div class='contaddr'><label>Address:</label> {!!$contact[0]['Address']!!}</div>
<div class='contphone'><label>Phone:</label> {!!$contact[0]['Phone1']!!} | {!!$contact[0]['Phone2']!!}</div>
<div class='contemail'><label>E-mail:</label> {!!$contact[0]['Email']!!}</div>
<div class='contfollow'><label>Follow us:</label><p>
                            <a href="{!!$contact[0]['Facebook']!!}"><img src="images/fb.png" alt="Facebook"></a>
                            &nbsp;<a href="{!!$contact[0]['Youtube']!!}"><img src="images/youtube.png" alt="Youtube"></a>
                            &nbsp;<a href="{!!$contact[0]['Skype']!!}"><img src="images/skype.png" alt="Skype"></a>
                            &nbsp;<a href="{!!$contact[0]['Google']!!}"><img src="images/gplus.png" alt="Google Plus"></a>
                        </p></div>
</div>

<div class="col-md-4 col-md-offset-2 col-sm-12 col-xs-12">
<p class='siteright'>
Get in touch with us
</p>
    <div class='contform'>
        {!! Form::open(['action' => 'HomeController@contactRequest', 'METHOD' => 'PUT']) !!}

        <ul class="errors">
            @foreach($errors->all('<li>:message</li>') as $message)

            @endforeach
        </ul>

        <div class="form-group">
            {!! Form:: text('name', '', array('placeholder' => 'Your Name', 'class' => 'form-control', 'id' => 'contname', 'rows' => '4' ))  !!}
        </div>

        <div class="form-group">
            {!! Form:: text('email', '', array('placeholder' => 'Your Email', 'class' => 'form-control', 'id' => 'contemail', 'rows' => '4' )) !!}
        </div>

        <div class="form-group">
            {!! Form:: text('phone', '', array('placeholder' => 'Your Phone', 'class' => 'form-control', 'id' => 'contphone', 'rows' => '4' )) !!}
        </div>

        <div class="form-group">
            {!! Form:: textarea('message', '', array('placeholder' => 'Message', 'class' => 'form-control', 'id' => 'contmessage', 'rows' => '4' )) !!}
        </div>



    </div>
    <div class="modal-footer">
        {!! Form::submit('Submit', array('class' => 'btn btn-primary')) !!}
        {!! Form:: close() !!}
    </div>
</div>

【问题讨论】:

  • 您的验证失败,因为您没有将数据传递给验证器。我看到 $data,但你从哪里得到它?在 emails.message 中创建一个视图。 Mail 函数将 $data 传递给您的视图。你只需要回应它。
  • $data 来自$data = Input::all();

标签: php forms laravel laravel-5


【解决方案1】:

电子邮件只是刀片模板,点表示目录结构。 Blade 模板存储在 resources/views 中,因此在这种情况下,emails.message 将导致 Laravel 在 resources/views/emails 中查找文件 message.blade.php

使用您的消息内容创建文件resources/views/emails/message.blade.php

正在传递表单中的所有数据(通过$data 参数),因此您应该能够像这样在消息视图文件中访问它。

Hello {{ $name }}, your phone number is {{ $phone }}

就主视图模板而言,您的错误处理代码应该是:

@foreach($errors->all() as $message)
    <li>{{ $message }}</li>
@endforeach`

【讨论】:

  • 我创建了它并添加了{{ $name }} {{ $phone }} {{ $email }} {{ $message }},但在提交时出现此错误htmlentities() expects parameter 1 to be string, object given (View: C:\xampp\htdocs\techmine\resources\views\emails\message.blade.php)
  • 我怀疑这与变量$message 冲突,这是电子邮件消息类本身被注入到视图中。您可以将 Form::textarea('message'... 重命名为 Form::textarea('body'... 并在刀片模板中使用 {{ $body }}。
  • 我刚刚尝试过,我得到了一个新的错误,这很好。 Call to a member function all() on string 我认为他们在联系人视图中指的是这一行 @foreach($errors-&gt;all('&lt;li&gt;:message&lt;/li&gt;') as $message)
  • 当视图需要一个数组时,您正在为 errors 值传递一个字符串 (-&gt;with('error', 'Feedback must contain...)。尝试-&gt;with('error', ['Feedback must contain...'])(将字符串包装在 [] 中以创建数组)。
  • 我修改了答案以包含对错误处理代码的更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
相关资源
最近更新 更多