首页 > 解决方案 > 如何在后台运行我的 php 脚本以发送电子邮件通知

问题描述

提交表单后,我可以向所有用户发送电子邮件,但这需要一些时间。我想要实现的是跳过该任务(发送电子邮件)并在提交表单后在后台运行它。因此,除了等待完成任务(发送电子邮件)之外,用户还可以做其他事情。

我试图查看https://laravel.com/docs/4.2/queues但我是 Laravel 的初学者,我不太了解文档。顺便说一句,我使用的是 laravel 4.2 的旧 laravel 版本。

APK文件控制器.php


$users = User::All();

foreach($users as $user) {
        $data = array(
            'apk_name' => Input::get('name'),
            'version' => $apk->version,
            'download_link' => Input::get('remarks'),
            'subject' => 'v' . $apk->version . ' is now available.',
            'message' => 'A new version of APK has been released!',
        );

        $this->userMailer->sendToApp($user, compact('data'));
    }
}

用户邮件程序.php

<?php namespace Sample\Mailers;

use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Lang;
use User;

class UserMailer extends Mailer
{

  public function sendToApp(User $user, $data)
  {
    $subject = $data['data']['subject'];
    $view = 'emails.clients.apkInfo';
    return $this->sendTo($user, $subject, $view, $data);
  }

}

邮件程序.php


<?php namespace Sample\Mailers;

use Illuminate\Mail\Mailer as Mail;

abstract class Mailer {

    private $mail;

    function __construct(Mail $mail) {

        $this->mail = $mail;        

    }

    public function sendTo($user, $subject, $view, $data = [] )
    {
        $this->mail->queue($view, $data, function ($message) use ($user, $subject) {
            $message->to($user->email)->subject($subject);
        });
    }
}

标签: phplaravel-4.2

解决方案


您可以创建一个工匠命令,就像这里描述的那样:

构建生成类的命令

要创建一个新命令,你可以使用命令:make Artisan 命令,它会生成一个命令存根来帮助你开始: 生成一个新的命令类

php artisan command:make FooCommand

默认情况下,生成的命令会存放在 app/commands 目录下;但是,您可以指定自定义路径或命名空间:

php artisan command:make FooCommand --path=app/classes --namespace=Classes

创建命令时, --command 选项可用于分配终端命令名称:

php artisan command:make AssignUsers --command=users:assign

然后,您创建一个 crontab 计划来运行您的命令,如下所述

添加 Cron 作业永久链接

在文本编辑器中为您的用户打开一个 crontab(在大多数发行版中为 vi):

crontab -e

笔记:

要更改使用的文本编辑器,请将环境变量添加到您的 ~/.bashrc 文件中,将 vim 替换为 nano,或您喜欢的任何其他基于终端的编辑器。

export EDITOR=vim

添加 Cron 作业,保存并退出。crontab 将保存在 /var/spool/cron/crontabs 作为特定于创建它的用户的 crontab。要稍后从中删除 Cron 作业,请从用户的 crontab 文件中删除该行。


推荐阅读