在Laravel 5.6中,是否有必要在创建之前检查目录是否存在? (情景)

时间:2018-03-24 20:10:01

标签: php laravel laravel-5 laravel-5.6

在Image Storage中使用的函数中,我意识到我可能过度复杂了代码。我有两个例子都返回相同的结果。

第一个例子:

    public function image(Request $request, User $user)
    {
      $file = $request->file('image');  

      $path = "user_" . $user->id . "_images";

      $filename = $path . "/test.jpg";

      Storage::disk('public')->put($filename, File::get($file));

      return back();
    }

此示例在两个方案中进行了测试。一旦在公共内部没有目录,并通过创建 public / user_1_images / test.jpg 返回...

第二种情况,我们已将 public / user_1_images / 作为空目录。意味着它已经存在。所以相反,它只是将文件放在那里而不创建文件夹。

第二个例子:

    public function image(Request $request, User $user)
    {
      $file = $request->file('image');  

      $path = "user_" . $user->id . "_images";

      if (!Storage::disk('public')->exists($path)) 
      {
          Storage::makeDirectory($path, 0755, true, true);
      }

      $filename = $path . "/test.jpg";

      Storage::disk('public')->put($filename, File::get($file));

      return back();

}

在这个例子中,我们检查是否存在public / user_1_images /,如果不存在,我们正在创建文件夹,然后将图像放入其中。

我是否需要这样做,如果我可以通过标题文件“user_1_images / test.jpg”自动检查/创建/不创建?

1 个答案:

答案 0 :(得分:1)

这一切都取决于您使用的驱动程序。所有驱动程序必须实现 AdapterInterface 接口,这是他们必须满足的唯一要求。

我简要介绍了一些受欢迎的驱动程序:

  • 本地驱动程序在写入路径之前始终调用 ensureDirectory(),因此无需手动创建目录。
  • FTP 驱动程序在写入路径之前始终调用 ensureDirectory(),因此无需手动创建目录。
  • S3 驱动程序不能确保存在目录,但是当要求写入包含目录的路径时,会在S3中创建所有必需的目录。所以再次,不需要手动创建目录。

因此,对于大多数(如果不是全部)驱动程序,您可以简单地写入路径,而不必担心目录是否存在。