ixudra / addressable
为 Laravel 框架提供地址支持的定制 Laravel 包 - 由 Ixudra 开发
Requires
- php: >=7.2
- illuminate/database: >=6.0
- illuminate/support: >=6.0
- ixudra/core: ~6.0
- laracasts/presenter: 0.2.*
- laravelcollective/html: ~6.0
Suggests
- ixudra/translation: Custom PHP translation library for the Laravel framework
README
为 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_1
、street_2
、number
、box
、postal_code
、city
、district
、country
、longitude
、latitude
这两个变量都需要传递给视图,以便使用默认视图。
<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(开发者)
- 电子邮件:jan.oris@ixudra.be
- 电话:+32 496 94 20 57