ixudra/addressable

为 Laravel 框架提供地址支持的定制 Laravel 包 - 由 Ixudra 开发

2.2.0 2021-02-22 10:30 UTC

This package is auto-updated.

Last update: 2024-09-22 18:18:04 UTC


README

Latest Version on Packagist license Total Downloads

为 Laravel 5 框架定制的 Laravel 地址包 - 由 Ixudra 开发。

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

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

安装

通过 Composer 拉取此包

    {
        "require": {
            "ixudra/addressable": "1.*"
        }
    }

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

    'providers'     => array(

        //...
        Ixudra\Addressable\AddressableServiceProvider::class,

    ),

使用 artisan 运行包迁移

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

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

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

使用方法

创建一个与 Address 模型具有多态关系的模型

    use Illuminate\Database\Eloquent\Model;
    use Ixudra\Addressable\Models\Address;

    class Shop extends Model {

        public function address()
        {
            return $this->morphOne( Address::class, 'reference' );
        }


        public function delete()
        {
            if( !is_null($this->address) ) {
                $this->address->delete();
            }

            parent::delete();
        }

    }

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

更新地址的过程与创建类似。您只需提供正确的信息,AddressFactory 将为您处理其余部分。您还可以通过省略传递给工厂的数据中的 file 属性来更新地址信息而不实际更新上传的文件。

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

    use Ixudra\Addressable\Services\Factories\AddressFactory;

    class ShopFactory {

        protected $addressFactory;


        /**
         * @codeCoverageIgnore
         */
        public function __construct(AddressFactory $addressFactory)
        {
            $this->addressFactory = $addressFactory;
        }


        public function create($input, $prefix = '')
        {
            $shop = Shop::create( array( 'name' => $input['name'] ) );
            $this->addressFactory->make( $input, $shop, $prefix );

            return $shop;
        }

        public function modify($shop, $input, $prefix = '')
        {
            $shop = $shop->update( array( 'name' => $input['name'] ) );
            $this->addressFactory->modify( $shop->address, $input, $shop, $prefix );

            return $shop;
        }

    }

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

  • bootstrap/default/data/verticalFull.blade.php,它包含一个 Twitter Bootstrap 实现,可以用于在页面上显示地址
  • bootstrap/default/data/verticalSimple.blade.php,它包含一个 Twitter Bootstrap 实现,可以用于在页面上显示地址
  • bootstrap/default/fields/inline.blade.php,它包含一个 Twitter Bootstrap 实现,可以包含在表单中以创建和/或修改地址信息
  • bootstrap/default/fields/verticalFull.blade.php,它包含一个 Twitter Bootstrap 实现,可以包含在表单中以创建和/或修改地址信息
  • bootstrap/default/fields/verticalSimple.blade.php,它包含一个 Twitter Bootstrap 实现,可以包含在表单中以创建和/或修改地址信息

以下示例中提供了这两种情况的用法示例

    {!! Form::open(array('url' => 'shops', 'method' => 'POST', 'id' => 'createShop', 'class' => 'form-horizontal', 'role' => 'form')) !!}

        <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('addressable::bootstrap/default/fields/inline')

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

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

输入视图假设一个变量 $input,它是一个包含输入数据值的关联数组。所需的键取决于您要使用的视图。选项包括:street_1street_2numberboxpostal_codecitydistrictcountrylongitudelatitude

这两个变量都需要传递给视图,以便使用默认视图。

    <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'>{{ $shop->name }}</div>
            </div>
        </div>
    </div>

    @include('addressable::bootstrap/default/data/inline', array('address' => $shop->address))

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

规划

  • 地理编码
  • 附加视图

支持

通过Patreon支持我,以帮助我进一步开发和维护此包!

许可证

本包是开源软件,许可协议为MIT许可协议

联系

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

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

Jan Oris(开发者)