Черты позволяют вам разделять методы между различными классами.Если вы поместите этот метод в черту и оба класса будут его использовать, это должно достичь того, что вы хотите.
Например:
trait SavesFiles
{
public static function saveFile($file, Array $options = []) {
$filename = "";
if (isset($options["name"])) {
$filename .= $options["name"];
}
if ($options["unique"]) {
$filename .= "-" . time();
}
$picture_path = "";
if ($filename) {
$extension = $file->getClientOriginalExtension();
$filename .= ".$extension";
$picture_path = $file->storeAs(SELF::$storageFolders, $filename);
} else {
$picture_path = $file->store(SELF::$storageFolders);
}
$storage_url = Storage::url($picture_path);
return $storage_url;
}
}
Тогда ваши модели могут использовать его следующим образом:
class Product extends Model
{
use SavesFiles;
...
}
Все, что отличается между моделями, например, папка, может быть определено в классе, например, public $folder = 'products';
, а затем использовано в признаке, например, $this->folder
.
Или, вы можете создать класс абстрактной модели с этим методом, и обе модели наследуются от него.Но черты были бы моим первым выбором.