图片管理器


README

Laravel 图片管理器

安装

第一步

 composer require digitaldream/photo

第二步 运行迁移

 php artisan migrate

第三步

 php artisan vendor:publish --provider="Photo/PhotoServiceProvider"

它将发布配置和视图文件。请根据项目需求自由编辑这些文件。

第四步

浏览 /photo/photos 以开始使用此库

配置策略

您可以配置谁可以在此图片库上拥有什么权限。创建一个新的类,并从 Photo\Policies\PhotoPolicy 继承,如下所示。

 namespace App\Policies;
 
 use Photo\Policies\PhotoPolicy as Policy;

  class PhotoPolicy extends Policy
  {
      /**
       * @param \App\Models\User $user
       *
       * @return bool
       */
      public function viewAny($user): bool
      {
          return $user->isTeacher();
      }
  }

如你所见,我们覆盖了 viewAny 方法。现在教师可以查看所有照片的列表。其他方法如 beforeviewcreateupdatedelete 也可以被覆盖。现在,为了注册此策略类,让我们更改 config/photo.php 中的 policy 键。

#file config/photo.php

'policy' => \App\Policies\PhotoPolicy::class,

特性

1. 从网络拖放。

2. 从本地计算机拖放

3. 裁剪和调整大小

4. Webp 转换

5. 复制图像 URL 并在网络上分享

7. 大小可配置和缩略图生成

8. SEO 友好型文件名。

9. 翻译

10. 包含 PHPUnit 测试类。 Drag n Drop from local machine Resize-image

如何在模型中作为 BelongsTo 使用

首先,您需要在模型迁移中添加一行,例如 posts。

$table->foreign('photo_id')->references('id')->on('photo_photos')->onDelete('set null');

其次,您需要在模型中定义关系。

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function photo()
    {
        return $this->belongsTo(\Photo\Models\Photo::class, 'photo_id');
    }

第三。让我们在控制器中制作上传。

    /**
    * @var \Photo\Repositories\PhotoRepository
    */
    protected $photoRepository;
            
    public function __construct(PhotoRepository $photoRepository)
    {
        $this->photoRepository = $photoRepository;
    }
    
    public function store(StoreRequest $request)
    {
    //Your other code.
        $post->photo_id = $this->photoRepository->create($file, ['caption' => $data['title']])->id;
    }

您必须通过 __construction 依赖注入解决 \Photo\Repositories\PhotoRepository

最后。是时候将图像渲染到视图中了。

 {!! $post->photo->renderThumbnails() !!}

这将渲染以下 HTML 代码。

<picture>
    <source type="image/webp" srcset="https://YourSite.com/storage/posts/thumbnails/nice-quietly-their-belong-place-on-it-the-appeared-to.webp">
    <img src="https://YourSite.com/storage/posts/thumbnails/nice-quietly-their-belong-place-on-it-the-appeared-to.jpeg" alt="Nice, quietly their belong, place on. It the appeared to">
</picture>

上面的代码将在 webp 和上传扩展中渲染缩略图。要渲染更大的图像,请执行以下操作

    {!! $post->photo->render('card-img-top') !!}

这里 render 方法将类名作为第一个参数,将样式作为第二个参数。

如何上传文件并仅获取文件路径。

    namesapce App\Repositories;
    
    class PostRepository
    {
       /**
        * @var \Photo\Services\PhotoService
        */
        protected PhotoService $photoService;
        
        public function __construct(PhotoService $photoService)
        {
            $this->photoService = $photoService;
        }
        
        public function store(Request $request)
        {
            $post = new Post();
            $post->fill($request->all());
            
            $mainImageFolder = "posts"
            $thumbnailWidth = 220;
            $thumbnailHheight= 200;
            $crop="no"; // "yes" will resize image automatically based on your maximum height,width.
            $thumbnailPath = "thumbnails"; // Thumbnails path are relative to main Image folder. 
                                            //In this case it will create a folder thumbnails under posts folder.
                        
            $post->image =  $this->photoService
                                    ->setDimension($thumbnailWidth, $thumbnailHheight, $thumbnailPath)
                                    ->store($mainImageFolder, $request->file('file'), $post->title, $crop)
                                    ->convert()
                                    ->getStoredImagePath();
            $post->save();
                         
        }
             
    }