tobento/service-user

PHP应用程序的用户界面。

1.0.1 2023-09-06 16:05 UTC

This package is auto-updated.

Last update: 2024-09-06 18:29:38 UTC


README

PHP应用程序的用户和地址接口。

目录

入门

使用以下命令添加运行中的用户服务项目的最新版本。

composer require tobento/service-user

要求

  • PHP 8.0 或更高版本

亮点

  • 框架无关,可与其他任何项目一起使用
  • 解耦设计

文档

用户

创建用户

use Tobento\Service\User\User;
use Tobento\Service\User\UserInterface;
use Tobento\Service\User\Addressable;

$user = new User(username: 'username');

var_dump($user instanceof UserInterface);
// bool(true)

var_dump($user instanceof Addressable);
// bool(true)

查看用户界面了解更多关于界面的信息。

查看可寻址了解更多关于界面的信息。

用户工厂

使用提供的用户工厂轻松创建用户

createUser

use Tobento\Service\User\UserFactory;
use Tobento\Service\User\UserFactoryInterface;
use Tobento\Service\User\UserInterface;
use Tobento\Service\User\AddressesFactoryInterface;

$userFactory = new UserFactory(
    addressesFactory: null, // null|AddressesFactoryInterface
);

var_dump($userFactory instanceof UserFactoryInterface);
// bool(true)

$user = $userFactory->createUser(username: 'username');

var_dump($user instanceof UserInterface);
// bool(true)

参数

use Tobento\Service\User\UserFactory;
use Tobento\Service\User\AddressesInterface;

$userFactory = new UserFactory();

$user = $userFactory->createUser(
    id: 1,
    number: 'user1',
    active: true,
    type: 'private',
    password: '',
    username: '',
    email: 'user@example.com',
    smartphone: '',
    locale: 'de-CH',
    birthday: '',
    dateCreated: '',
    dateUpdated: '',
    dateLastVisited: '',
    image: [],
    newsletter: false,
    addresses: null, // null|AddressesInterface
);

createUserFromArray

use Tobento\Service\User\UserFactory;

$userFactory = new UserFactory();

$user = $userFactory->createUserFromArray([
    'username' => 'username',
]);

如果您想创建带有地址的用户,您需要设置AddressesFactory,否则地址不会创建。

use Tobento\Service\User\UserFactory;
use Tobento\Service\User\AddressesFactory;

$userFactory = new UserFactory(new AddressesFactory());

$user = $userFactory->createUserFromArray([
    'username' => 'username',
    'addresses' => [
        ['key' => 'payment'],
        ['key' => 'shipping'],
    ],
]);

用户界面

use Tobento\Service\User\UserFactory;
use Tobento\Service\User\UserInterface;

$userFactory = new UserFactory();

$user = $userFactory->createUser(username: 'username');

var_dump($user instanceof UserInterface);
// bool(true)

var_dump($user->id());
// int(0)

var_dump($user->number());
// string(0) ""

var_dump($user->active());
// bool(true)

var_dump($user->type());
// string(0) ""

var_dump($user->password());
// string(0) ""

var_dump($user->username());
// string(8) "username"

var_dump($user->email());
// string(0) ""

var_dump($user->smartphone());
// string(0) ""

var_dump($user->locale());
// string(0) ""

var_dump($user->birthday());
// string(0) ""

var_dump($user->dateCreated());
// string(0) ""

var_dump($user->dateUpdated());
// string(0) ""

var_dump($user->dateLastVisited());
// string(0) ""

var_dump($user->image());
// array(0) { }

var_dump($user->newsletter());
// bool(false)

var_dump($user->greetingSalutation());
// string(5) "greet"

var_dump($user->greeting());
// string(8) "username"

地址

创建地址

use Tobento\Service\User\Address;
use Tobento\Service\User\AddressInterface;

$address = new Address(key: 'shipping');

var_dump($address instanceof AddressInterface);
// bool(true)

地址工厂

使用提供的地址工厂轻松创建地址

createAddress

use Tobento\Service\User\AddressFactory;
use Tobento\Service\User\AddressFactoryInterface;
use Tobento\Service\User\AddressInterface;

$addressFactory = new AddressFactory();

var_dump($addressFactory instanceof AddressFactoryInterface);
// bool(true)

$address = $addressFactory->createAddress(key: 'shipping');

var_dump($address instanceof AddressInterface);
// bool(true)

参数

use Tobento\Service\User\AddressFactory;

$addressFactory = new AddressFactory();

$address = $addressFactory->createAddress(
    key: 'payment',
    id: 0,
    userId: 0,
    group: '',
    salutation: 'mr',
    name: '',
    firstname: 'Adam',
    lastname: 'Smith',
    company: '',
    address1: 'Musterstrasse',
    address2: '',
    address3: '',
    postcode: '34',
    city: 'Bern',
    state: '',
    countryKey: 'CH',
    country: 'Schweiz',
    email: '',
    telephone: '',
    smartphone: '',
    fax: '',
    website: '',
    locale: 'de',
    birthday: '',
    notice: '',
    info: '',
    selectable: false,
);

createAddressFromArray

use Tobento\Service\User\AddressFactory;

$addressFactory = new AddressFactory();

$address = $addressFactory->createAddressFromArray([
    'key' => 'payment',
]);

地址接口

getters

use Tobento\Service\User\AddressFactory;
use Tobento\Service\User\AddressInterface;

$addressFactory = new AddressFactory();

$address = $addressFactory->createAddress(key: 'shipping');

var_dump($address instanceof AddressInterface);
// bool(true)

var_dump($address->key());
// string(8) "shipping"

var_dump($address->isPrimary());
// bool(false)

var_dump($address->id());
// int(0)

var_dump($address->userId());
// int(0)

var_dump($address->group());
// string(0) ""

var_dump($address->salutation());
// string(0) ""

var_dump($address->name());
// string(0) ""

var_dump($address->firstname());
// string(0) ""

var_dump($address->lastname());
// string(0) ""

var_dump($address->hasFullname());
// bool(false)

var_dump($address->fullname());
// string(0) ""

var_dump($address->company());
// string(0) ""

var_dump($address->address1());
// string(0) ""

var_dump($address->address2());
// string(0) ""

var_dump($address->address3());
// string(0) ""

var_dump($address->postcode());
// string(0) ""

var_dump($address->city());
// string(0) ""

var_dump($address->state());
// string(0) ""

var_dump($address->hasPostcodeCity());
// bool(false)

var_dump($address->postcodeCity());
// string(0) ""

var_dump($address->countryKey());
// string(0) ""

var_dump($address->country());
// string(0) ""

var_dump($address->hasContact());
// bool(false)

var_dump($address->email());
// string(0) ""

var_dump($address->telephone());
// string(0) ""

var_dump($address->smartphone());
// string(0) ""

var_dump($address->fax());
// string(0) ""

var_dump($address->website());
// string(0) ""

var_dump($address->locale());
// string(0) ""

var_dump($address->birthday());
// string(0) ""

var_dump($address->notice());
// string(0) ""

var_dump($address->info());
// string(0) ""

var_dump($address->selectable());
// bool(false)

var_dump($address->greetingSalutation());
// string(5) "greet"

var_dump($address->greeting());
// string(0) ""

with 方法

with 方法将返回一个新实例。

use Tobento\Service\User\AddressFactory;

$addressFactory = new AddressFactory();

$address = $addressFactory->createAddress(key: 'shipping');

$address = $address->withGroup('addressbook');

$address = $address->withSalutation('mr');

$address = $address->withName('Name');

$address = $address->withFirstname('John');

$address = $address->withLastname('Smith');

$address = $address->withCompany('Name of Company');

$address = $address->withAddress1('Address Line 1');

$address = $address->withAddress2('Address Line 2');

$address = $address->withAddress3('Address Line 3');

$address = $address->withPostcode('3000');

$address = $address->withCity('Bern');

$address = $address->withState('BE');

$address = $address->withCountryKey('CH');

$address = $address->withCountry('Schweiz');

$address = $address->withEmail('user@example.com');

$address = $address->withTelephone('');

$address = $address->withSmartphone('');

$address = $address->withFax('');

$address = $address->withWebsite('example.com');

$address = $address->withLocale('de-CH');

$address = $address->withBirthday('');

$address = $address->withNotice('Some message');

$address = $address->withInfo('Some message');

$address = $address->withSelectable(false);

$address = $address->withGreeting(
    greeting: 'John Smith',
    salutation: 'mr'
);

地址

创建地址

use Tobento\Service\User\Addresses;
use Tobento\Service\User\AddressesInterface;
use Tobento\Service\User\AddressFactoryInterface;
use Tobento\Service\User\AddressInterface;
use Tobento\Service\User\Address;

$addresses = new Addresses(
    null, // addressFactory: null|AddressFactoryInterface
    // addresses: ...AddressInterface
    new Address(key: 'shipping'),
    new Address(key: 'payment'),
);

var_dump($addresses instanceof AddressesInterface);
// bool(true)

查看地址接口了解更多关于界面的信息。

地址工厂

使用提供的地址工厂轻松创建地址对象

createAddresses

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\AddressesFactoryInterface;
use Tobento\Service\User\AddressesInterface;
use Tobento\Service\User\AddressFactoryInterface;
use Tobento\Service\User\AddressInterface;
use Tobento\Service\User\Address;

$addressesFactory = new AddressesFactory(
    addressFactory: null, // null|AddressFactoryInterface
);

var_dump($addressesFactory instanceof AddressesFactoryInterface);
// bool(true)

$addresses = $addressesFactory->createAddresses(
    // addresses: ...AddressInterface
    new Address(key: 'shipping'),
);

var_dump($addresses instanceof AddressesInterface);
// bool(true)

createAddressesFromArray

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\Address;

$addresses = (new AddressesFactory())->createAddressesFromArray([
    ['key' => 'payment'],
    new Address(key: 'shipping'),
]);

地址接口

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\AddressesInterface;

$addresses = (new AddressesFactory())->createAddresses();

var_dump($addresses instanceof AddressesInterface);
// bool(true)

addressFactory

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\AddressFactoryInterface;

$addresses = (new AddressesFactory())->createAddresses();

var_dump($addresses->addressFactory() instanceof AddressFactoryInterface);
// bool(true)

get

get 方法根据指定的键返回地址。如果地址尚不存在,它将创建并添加到地址中。

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\AddressInterface;

$addresses = (new AddressesFactory())->createAddresses();

$address = $addresses->get(key: 'payment');

var_dump($address instanceof AddressInterface);
// bool(true)

add

use Tobento\Service\User\AddressesFactory;

$addresses = (new AddressesFactory())->createAddresses();

$address = $addresses->addressFactory()->createAddress(key: 'payment');

$addresses->add($address);

create

create 方法使用指定的参数创建地址,但不将其添加到地址中。

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\AddressInterface;

$addresses = (new AddressesFactory())->createAddresses();

$address = $addresses->create(['key' => 'payment']);

var_dump($address instanceof AddressInterface);
// bool(true)

// you might add it to the addresses
$addresses->add($address);

address

address 方法创建地址并将其添加到地址中。

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\AddressInterface;

$addresses = (new AddressesFactory())->createAddresses();

$address = $addresses->address(['key' => 'payment']);

var_dump($address instanceof AddressInterface);
// bool(true)

has

检查地址是否存在。

use Tobento\Service\User\AddressesFactory;

$addresses = (new AddressesFactory())->createAddresses();

var_dump($addresses->has(key: 'payment'));
// bool(false)

$addresses->address(['key' => 'payment', 'firstname' => 'John']);

var_dump($addresses->has(key: 'payment'));
// bool(true)

// you might check for each address parameter
var_dump($addresses->has(
    key: 'payment',
    with: ['firstname', 'lastname'],
));
// bool(false)

var_dump($addresses->has(
    key: 'payment',
    with: ['firstname'],
));
// bool(true)

delete

use Tobento\Service\User\AddressesFactory;

$addresses = (new AddressesFactory())->createAddresses();

$addresses->delete(key: 'payment');

all

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\AddressInterface;

$addresses = (new AddressesFactory())->createAddresses();

$addresses->address(['key' => 'payment']);

foreach($addresses->all() as $address) {
    var_dump($address instanceof AddressInterface);
    // bool(true)
}

// or just
foreach($addresses as $address) {
    var_dump($address instanceof AddressInterface);
    // bool(true)
}

filter

您可能需要对返回的新实例进行过滤。

use Tobento\Service\User\AddressesFactory;
use Tobento\Service\User\AddressInterface;

$addresses = (new AddressesFactory())->createAddresses();

$addresses = $addresses->filter(
    fn(AddressInterface $a): bool => $a->countryKey() === 'CH'
);

group

group 方法按指定的组过滤地址。

use Tobento\Service\User\AddressesFactory;

$addresses = (new AddressesFactory())->createAddresses();

$addresses = $addresses->group('addressbook');

可寻址

use Tobento\Service\User\User;
use Tobento\Service\User\Addressable;

$user = new User(username: 'username');

var_dump($user instanceof Addressable);
// bool(true)

addresses

use Tobento\Service\User\User;
use Tobento\Service\User\AddressesInterface;

$user = new User(username: 'username');

var_dump($user->addresses() instanceof AddressesInterface);
// bool(true)

查看地址接口了解更多关于界面的信息。

address

address 方法如果存在则返回地址,或者为指定的键创建一个新的地址。

use Tobento\Service\User\User;
use Tobento\Service\User\AddressInterface;

$user = new User(username: 'username');

// returns primary address
var_dump($user->address() instanceof AddressInterface);
// bool(true)

var_dump($user->address(key: 'payment') instanceof AddressInterface);
// bool(true)

hasAddress

use Tobento\Service\User\User;

$user = new User(username: 'username');

var_dump($user->hasAddress(key: 'payment'));
// bool(false)

// you might check for each address parameter
var_dump($user->hasAddress(
    key: 'payment',
    with: ['firstname', 'lastname'],
));
// bool(false)

鸣谢