【问题标题】:PHP Fatal error: method_exists(): The script tried to execute a method or access a property of an incomplete object Laravel 5.3PHP致命错误:method_exists():脚本试图执行方法或访问不完整对象Laravel 5.3的属性
【发布时间】:2017-05-21 01:13:43
【问题描述】:

问题是我有两个 Laravel 项目在 Laravel 5.15.3 上工作并共享公共数据库。这两个项目都放置在不同的子域上并运行。 现在,在将queue 驱动程序作为database 用于两个项目时,我正在使用5.3 恶魔在5.1 排队的作业上运行,但出现以下错误。

PHP Fatal error:  method_exists(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "App\Jobs\StoreAppliedjob" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition  in /Applications/MAMP/htdocs/admin-badiyajobs/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php on line 83

                                                                                                                                                                                                                                                                                                                        [Symfony\Component\Debug\Exception\FatalErrorException]       

5.1 队列在 5.1 上使用队列侦听器运行时工作正常。请注意,我不能在两个项目上使用单独的 cron 来处理队列,因为这会搞砸一切。请建议我该怎么办?

【问题讨论】:

    标签: php laravel laravel-5 cron queue


    【解决方案1】:

    队列在将作业发送到队列之前对其进行序列化,并在处理时对其进行反序列化。您需要在处理它的位置上使用App\Jobs\StoreAppliedjob

    【讨论】:

    • 你能举个例子或参考它是如何完成的。到目前为止,我从未发现有任何需要这样做。
    • 好吧,据我所知,您有 2 个项目,您的 5.3 项目处理来自 5.1 项目的工作。就其本身而言,这不应该构成真正的问题,作业接口和序列化或多或少是相同的。但是你从5.1项目推送到队列的App\Jobs\StoreAppliedjob也应该存在于5.3项目同名命名空间,否则queue handler unserialize处理不了。
    • 不过,我不知道处理这项工作需要多少“其他”代码。通常相关的模型、存储库等存在于您从中推送作业的代码库中。为了处理它而将代码从一个项目复制到另一个项目,因为它恰好有正在运行的队列工作者,这不是一个好的解决方案。
    • 实际上,我检查了这两个版本的工作方式。有很多不同..所以我用Event代替。
    • 只要你想在同一个请求周期中处理它,用事件来处理是一个选项是的。但是有些代码应该异步处理:)
    猜你喜欢
    • 2010-11-16
    • 2012-02-02
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2012-01-20
    相关资源
    最近更新 更多