ixudra/imageable

适用于Laravel 5框架的自定义图像处理包 - 由Ixudra开发

8.1.0 2023-08-08 20:17 UTC

This package is auto-updated.

Last update: 2024-09-08 22:34:48 UTC


README

Latest Version on Packagist license Total Downloads

适用于Laravel 5框架的自定义图像处理包 - 由Ixudra开发。

ixudra/imageable包提供了一个易于使用的多态图像模型,该模型可以链接到任何Laravel PHP应用程序中的一个或多个模型。该包包含一个图像模型类以及一个工厂类,用于创建和编辑图像模型。此外,该包还将处理将实际文件移动和存储到正确位置。

此包可以在任何给定时间由任何人使用,但请注意,它是针对我个人的自定义工作流程进行优化的。它可能不完全适合您的项目,可能需要进行修改。

安装

通过Composer获取此包

    {
        "require": {
            "ixudra/imageable": "8.*"
        }
    }

将服务提供者添加到您的config/app.php文件中

    'providers'     => array(

        //...
        Ixudra\Imageable\ImageableServiceProvider::class,

    ),

使用artisan运行包迁移

    php artisan migrate --package="ixudra/imageable"

或者,您也可以使用artisan发布迁移

    // Publish all resources from all packages
    php artisan vendor:publish
    
    // Publish only the resources of the package
    php artisan vendor:publish --provider="Ixudra\\Imageable\\ImageableServiceProvider"

使用方法

创建一个与Image模型多态关联的模型

    use Ixudra\Imageable\Models\Image;
    use Ixudra\Imageable\Traits\ImageableTrait;

    class Card extends Eloquent {

        use ImageableTrait;


        protected $imagePath = 'images/cards';


        public function image()
        {
            return $this->morphOne( Image::class, 'imageable' );
        }


        public function delete()
        {
            $this->image->delete();

            parent::delete();
        }

    }

此类必须扩展Ixudra\Imageable\Traits\ImageableTrait特质,并且必须具有可用的imagePath属性。该imagePath属性描述了在系统上存储图像的路径。该包使用public/目录作为起点,并将imagePath的值附加到它以生成完整路径。

您可以使用包中提供的ImageFactory类创建新的Image模型。该ImageFactory将负责创建Image模型,将Image链接到指定的模型,并将上传的文件移动到指定模型中指定的位置。

ImageFactory期望一组特定的输入参数

  • file包含实际上传的文件
  • alt包含图像的名称(在显示图像时将用作alt
  • title包含图像的名称(在显示图像时将用作title

更新图像的工作方式与创建它们类似。您只需提供正确的信息,ImageFactory就会为您处理其余的操作。您还可以在不实际更新上传的文件的情况下更新图像信息。这可以通过省略传递给工厂的数据中的file属性来实现。

以下示例提供了一个利用包功能的完整工厂类的示例

    use Ixudra\Imageable\Services\Factories\ImageFactory;

    class CardFactory {

        protected $imageFactory;


        public function __construct(ImageFactory $imageFactory)
        {
            $this->imageFactory = $imageFactory;
        }


        public function create($input, $prefix = '')
        {
            $card = Card::create( array( 'name' => $input['name'] ) );
            $this->imageFactory->make( $input, $card, $prefix );

            return $card;
        }

        public function modify($card, $input, $prefix = '')
        {
            $card = $card->update( array( 'name' => $input['name'] ) );
            $this->imageFactory->modify( $card->image, $input, $card, $prefix );

            return $card;
        }

    }

最后,该包还提供了一些可以使用的视图

  • data.blade.php包含一个Twitter Bootstrap实现,允许您在页面上显示图像
  • fields.blade.php包含一个Twitter Bootstrap实现,可以包含在表单中创建和/或修改图像信息

以下示例显示了这两种情况的使用示例

    {!! Form::open(array('url' => 'cards', 'method' => 'POST', 'id' => 'createCard', 'class' => 'form-horizontal', 'role' => 'form', 'files' => true)) !!}

        <div class="well well-large">
            <div class='form-group {{ $errors->has('name') ? 'has-error' : '' }}'>
                {!! Form::label('name', 'Name:', array('class' => 'control-label col-lg-3')) !!}
                <div class="col-lg-6">
                    {!! Form::text('name', $input['name'], array('class' => 'form-control')) !!}
                    {!! $errors->first('name', '<span class="help-block">:message</span>') !!}
                </div>
            </div>
        </div>

        @include('imageable::images/fields', array( 'prefix' => 'image_' ))

        <div class="action-button">
            {!! Form::submit('Submit', array('class' => 'btn btn-primary')) !!}
            {!! HTML::linkRoute('cards.index', 'Cancel', array(), array('class' => 'btn btn-default')) !!}
        </div>

    {!! Form::close() !!}

fields.blade.php文件默认假定两个变量

  • $input:输入字段的默认值关联数组。必需键:titlealt
  • $requiredFields:用户必须填写的输入字段数组。如果字段的名称在数组中,则会在表单字段中添加一个required属性,然后可以使用CSS(不包括在内)来向用户发出信号。

这两个变量都需要传递到视图中,才能使用默认视图。

    <div class="row">
        <div class="well well-large col-md-12">
            <div class='col-md-10'>
                <div class='col-md-4'>Name:</div>
                <div class='col-md-8'>{{ $card->name }}</div>
            </div>
        </div>
    </div>

    @include('imageable::images/data', array('imageable' => $card))

使用这些视图并非必须才能利用本包的功能。然而,值得注意的是,这两个视图默认都利用了ixudra/translation包的功能。该ixudra/translation包不是本包的要求,但必须通过composer引入才能利用默认提供的视图。

计划

  • 提高对每个模型多个图片的支持
  • 添加JavaScript库以改善用户体验

支持

通过Patreon支持我,帮助我进一步开发和维护这个包吧!!

许可

本包是开源软件,受MIT许可证许可。

联系方式

对于包的问题、错误、建议和/或功能请求,请使用Github问题系统,或提交一个pull request。提交问题时,请始终提供详细的解释,任何您获得的响应或反馈,可能相关的日志消息以及演示问题的源代码示例。如果没有这些,我可能无法帮助您解决问题。在提交问题或pull request之前,请查阅贡献指南

对于任何其他问题,请随时使用以下凭证

Jan Oris(开发者)