我需要一个雄辩的模型来代表上载到服务器的文档。这样的字段之一就是文件的绝对路径。我希望能够在数据库记录更新时移动文件。我已经看到Laravel包含了处理此类事件的观察者。问题是:
观察者类的方法名称反映了您希望侦听的口才事件。这些方法中的每一个都将模型作为唯一参数。
不幸的是,这意味着,在给定的系统下,我无法真正移动文件,因为我将无法检索相关文件的当前位置和新位置。还有另一种方法可以检测访问旧值和新值时值何时发生变化?
听起来您可以为此使用updating
模型事件。您可以boot
使用服务提供商的方法(例如app/Providers/AppServiceProvider.php
)注册事件,也可以通过创建观察者类来注册事件。
该isDirty
和getOriginal
方法可以帮助你检查文件是否需要移动,然后拿到它的原始路径。
例如:
use Storage; use App\Document; public function boot() { Document::updating(function ($document) { if ($document->isDirty('file_path')) { // File needs to be moved $current_path = $document->getOriginal('file_path'); $new_path = $document->file_path; Storage::move($current_path, $new_path); } }); }
另请参阅:Laravel更新雄辩事件:获取数据