tobento / app-country
应用国家支持。
1.0.0
2023-07-13 05:54 UTC
Requires
- php: >=8.0
- tobento/app: ^1.0
- tobento/app-migration: ^1.0
- tobento/service-country: ^1.0
- tobento/service-dir: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.5
- tobento/service-filesystem: ^1.0.5
- tobento/service-language: ^1.0.4
- vimeo/psalm: ^4.0
This package is not auto-updated.
Last update: 2024-09-20 09:38:39 UTC
README
应用的国家支持。
目录
入门
运行以下命令添加应用国家项目的最新版本。
composer require tobento/app-country
需求
- PHP 8.0 或更高版本
文档
应用
如果您正在使用骨架,请查看 应用骨架。
您还可以查看 应用 以了解有关应用的更多信息。
国家启动
国家启动执行以下操作
- 安装国家文件
- 实现国家接口
use Tobento\App\AppFactory; // Create the app $app = (new AppFactory())->createApp(); // Add directories: $app->dirs() ->dir(realpath(__DIR__.'/../'), 'root') ->dir(realpath(__DIR__.'/../app/'), 'app') ->dir($app->dir('app').'config', 'config', group: 'config') ->dir($app->dir('root').'public', 'public') ->dir($app->dir('root').'vendor', 'vendor'); // Adding boots $app->boot(\Tobento\App\Country\Boot\Country::class); // Run the app $app->run();
可用的国家接口
启动后以下接口可用
use Tobento\App\AppFactory; use Tobento\Service\Country\CountryFactoryInterface; use Tobento\Service\Country\CountriesFactoryInterface; use Tobento\Service\Country\CountryRepositoryInterface; // Create the app $app = (new AppFactory())->createApp(); // Add directories: $app->dirs() ->dir(realpath(__DIR__.'/../'), 'root') ->dir(realpath(__DIR__.'/../app/'), 'app') ->dir($app->dir('app').'config', 'config', group: 'config') ->dir($app->dir('root').'public', 'public') ->dir($app->dir('root').'vendor', 'vendor'); // Adding boots $app->boot(\Tobento\App\Country\Boot\Country::class); $app->booting(); $countryFactory = $app->get(CountryFactoryInterface::class); $countriesFactory = $app->get(CountriesFactoryInterface::class); $countryRepository = $app->get(CountryRepositoryInterface::class); // Run the app $app->run();
查看 国家服务 了解更多关于接口的信息。
检索国家
您可以使用 CountryRepositoryInterface::class
来检索国家
use Tobento\App\AppFactory; use Tobento\Service\Country\CountryRepositoryInterface; // Create the app $app = (new AppFactory())->createApp(); // Add directories: $app->dirs() ->dir(realpath(__DIR__.'/../'), 'root') ->dir(realpath(__DIR__.'/../app/'), 'app') ->dir($app->dir('app').'config', 'config', group: 'config') ->dir($app->dir('root').'public', 'public') ->dir($app->dir('root').'vendor', 'vendor'); // Adding boots $app->boot(\Tobento\App\Country\Boot\Country::class); $app->booting(); $countryRepository = $app->get(CountryRepositoryInterface::class); // Run the app $app->run();
查看 国家仓库接口 了解更多信息。
添加或自定义国家
目前,国家在 en
、de
、fr
和 it
等地区可用。
您可以通过以下方式添加或自定义/覆盖新的国家
use Tobento\App\AppFactory; use Tobento\Service\Country\CountryRepositoryInterface; // Create the app $app = (new AppFactory())->createApp(); // Add directories: $app->dirs() ->dir(realpath(__DIR__.'/../'), 'root') ->dir(realpath(__DIR__.'/../app/'), 'app') ->dir($app->dir('app').'config', 'config', group: 'config') ->dir($app->dir('root').'public', 'public') ->dir($app->dir('root').'vendor', 'vendor'); // Add country directory with higher priority: $this->app->dirs()->dir( dir: $this->app->dir('app').'countries-custom/', // do not use 'countries' as name for migration purposes name: 'countries.custom', group: 'countries', // add higher priority as default countries dir: priority: 300, ); // Adding boots $app->boot(\Tobento\App\Country\Boot\Country::class); // Run the app $app->run();
然后只需在定义的目录中添加您想要覆盖的国家文件。如果文件不存在,则使用默认国家目录中的文件。
了解更多
在表单中使用国家
以下示例需要具有以下启动的 应用视图 包
// ... $app->boot(\Tobento\App\View\Boot\View::class); $app->boot(\Tobento\App\View\Boot\Form::class); // ...
使用国家列的示例
use Tobento\Service\Country\CountryRepositoryInterface; use Tobento\Service\Country\CountryInterface; use Tobento\Service\View\ViewInterface; $countryRepository = $app->get(CountryRepositoryInterface::class); $countries = $countryRepository->findCountries(locale: 'de'); // You may filter countries: $countries = $countries->only(['CH', 'US']); $view = $app->get(ViewInterface::class); $content = $view->render(view: 'countries/select', data: [ 'countries' => $countries->column(column: 'name', index: 'code'), ]);
views/countries/select.php
视图
<?= $view->form()->select( name: 'countries[]', items: $countries, emptyOption: ['none', '---'], ) ?> /* <select name="countries[]" id="countries"> <option value="none">---</option> <option value="CH">Schweiz</option> <option value="US">Vereinigte Staaten</option> </select> */
您可以查看 选择表单元素 了解更多。
按大洲分组国家的示例
use Tobento\Service\Country\CountryRepositoryInterface; use Tobento\Service\Country\CountryInterface; use Tobento\Service\View\ViewInterface; $countryRepository = $app->get(CountryRepositoryInterface::class); $countries = $countryRepository->findCountries(locale: 'de'); // Grouped column: $groupedCountries = $countries->groupedColumn(group: 'continent', column: 'name', index: 'code'); ksort($groupedCountries); $view = $app->get(ViewInterface::class); $content = $view->render(view: 'countries/select', data: [ 'countries' => $groupedCountries, ]);
views/countries/select.php
视图
<?= $view->form()->select( name: 'countries[]', items: $countries, selectAttributes: [], optionAttributes: [], optgroupAttributes: [], ) ?> /* <select name="countries[]" id="countries"> <optgroup label="Afrika"> <option value="DZ">Algerien</option> ... </optgroup> <optgroup label="Antarktika"> <option value="AQ">Antarktis</option> ... </optgroup> ... </select> */
按自定义组分组国家的示例
use Tobento\Service\Country\CountryRepositoryInterface; use Tobento\Service\Country\CountryInterface; use Tobento\Service\View\ViewInterface; $countryRepository = $app->get(CountryRepositoryInterface::class); $countries = $countryRepository->findCountries(locale: 'de'); // Handle grouping: $countries = $countries->map(function(CountryInterface $c) { if (in_array($c->code(), ['CH', 'FR'])) { return $c->withGroup('Near By')->withPriority(100); } return $c->withGroup('All Others'); }); // You may sort it by priority: $countries = $countries->sort( fn(CountryInterface $a, CountryInterface $b): int => $b->priority() <=> $a->priority() ); // Grouped column: $groupedCountries = $countries->groupedColumn(group: 'group', column: 'name', index: 'code'); $view = $app->get(ViewInterface::class); $content = $view->render(view: 'countries/select', data: [ 'countries' => $groupedCountries, ]);
views/countries/select.php
视图
<?= $view->form()->select( name: 'countries[]', items: $countries, selectAttributes: [], optionAttributes: [], optgroupAttributes: [], ) ?> /* <select name="countries[]" id="countries"> <optgroup label="Near By"> <option value="FR">Frankreich</option> <option value="CH">Schweiz</option> </optgroup> <optgroup label="All Others"> <option value="AF">Afghanistan</option> <option value="AX">Ålandinseln</option> <option value="AL">Albanien</option> ... </optgroup> </select> */