【问题标题】:Run a php script inside a laravel project在 laravel 项目中运行 php 脚本
【发布时间】:2021-08-17 14:02:26
【问题描述】:

我在 html 中有以下代码,一个简单的电子邮件表单:

                <form class="main_form" method="post" action="sendmail.php">
                    <div class="row">
                     
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12">
                            <input class="form-control" placeholder="title" type="text" name="Title">
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12">
                            <input class="form-control" placeholder="Email" type="text" name="Email">
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12">
                            <textarea class="textarea" placeholder="message" type="text" name="Message"></textarea>
                        </div>
                        <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12">
                            <button class="send" >send</button>
                        </div>
                    </div>
                </form>

这是我每次点击“发送”时要运行的脚本 (sendmail.php)

<?php
  if (isset($_POST['submitted_form'])){
    $subject = $_POST['Title'];
    $message = "Email : $_POST['Email'] Message: $_POST['Message']";
    $headers = "From:abc@xyz.com";
    send_mail($subject,$message,$headers);
  }
function send_mail( $subject, $message, $headers){
    // https://stackoverflow.com/questions/5335273/how-can-i-send-an-email-using-php
    $to = "bordadoscreativos.02@gmail.com";
    if(mail($to, $subject, $message, $headers)){
        echo "Message sent successfully...";
     }else {
        echo "Message could not be sent...";
     }
}
?>

现在我的问题是每次我点击发送时,URL 都会更改为http://127.0.0.1:8000/sendmail.php 并抛出 404。我该怎么办?为 sendmail.php 创建一个控制器?我已经尝试在 web.php 中为 sendmail.php 创建一个路由,但它仍然不起作用。

【问题讨论】:

  • 而不是创建 sendmail.php 。在控制器中创建一个方法
  • @JohnLobo 以及如何将我的 html 代码重定向到该控制器?
  • 您需要创建路由。只需先学习 laravel 的基础知识,然后再进行操作。它可以帮助您自己解决大部分问题。如果你用谷歌搜索它有很多可用的 laravel 资源

标签: php html laravel forms


【解决方案1】:

在资源/视图路径中创建 send_mail.blade.php

<form class="main_form" method="post" action="/send_mail">
      @csrf
                <div class="row">
                 
                    <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12">
                        <input class="form-control" placeholder="title" type="text" name="Title">
                    </div>
                    <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12">
                        <input class="form-control" placeholder="Email" type="text" name="Email">
                    </div>
                    <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12">
                        <textarea class="textarea" placeholder="message" type="text" name="Message"></textarea>
                    </div>
                    <div class="col-xl-12 col-lg-12 col-md-12 col-sm-12">
                        <button class="send" >send</button>
                    </div>
                </div>
            </form>

然后在 app\Http\Controllers 路径下新建类 SendMailController.php

namespace App\Http\Controllers;
use App\Models\SendMail;
use Illuminate\Http\Request;

class BankCashController extends Controller
{
    public function send_mail(Request $request) {
        $to = "bordadoscreativos.02@gmail.com";
        $headers = "From:abc@xyz.com";
        $subject = $request->get('Subject');
        $message = $request->get('Email') . "</br>" . $request->get('Message');

        if(mail($to, $subject, $message, $headers)){
            echo "Message sent successfully...";
        } else {
            echo "Message could not be sent...";
        }
    }
}

在 routes\web.php 中添加这条路由

Route::post('/send_mail', 'app\Http\Controllers\SendMailControllere@send_mail');

您还需要在 app\Models 路径中创建 SendMail.php 模型

namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class SendMail extends Model
{
    protected $guard_name = 'web';

    protected $fillable = [
        'title',
        'email',
        'message',
        'to',
        ... //add all columns of your table
    ];
 }

【讨论】:

  • 模型包含什么?代码的核心已经在控制器内部。就这样,我会接受你的回答
  • 它也返回 419 错误。我认为这是因为它缺少 html 表单中的 CSRF 令牌。我会研究它并尝试稍后添加
  • 哦,是的。您应该在表单块中添加@csrf。
【解决方案2】:

你这里有一个项目结构问题,如果你使用 Laravel,你必须在 MVC 模式中分离,这意味着所有逻辑都必须在控制器中而不是在你的视图中。

如果你想在你的视图中使用 php 代码,你可以使用刀片,刀片对于条件、bucles 等很有用。

了解有关 laravel 项目结构和刀片的更多信息 Doc Laravel Blade

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 2016-09-01
    • 2020-08-12
    • 1970-01-01
    • 2023-03-29
    • 2014-12-07
    • 2018-07-21
    • 2018-04-15
    • 2018-11-06
    相关资源
    最近更新 更多