galactium / space
Galactium Space
Requires
- ext-json: *
Requires (Dev)
Suggests
- spatie/schema-org: Required for SEO component (^2.0)
- swiftmailer/swiftmailer: Required for sending emails (^6.0).
This package is auto-updated.
Last update: 2024-09-08 11:43:50 UTC
README
Galactium Space 是一个轻量级库,为 Galactium 项目提供扩展功能。
要求
- PHP 7.1 或更高版本
- Phalcon 3.3
安装
composer require galactium/space
组件
翻译
新的翻译适配器:NestedArray
- 实现 \JsonSerializable 接口
use Galactium\Space\Translation\Adapter\NestedArray; $messages = [ 'title' => [ 'message' => 'Welcome' ], ]; $adapter = new NestedArray([ 'content' => $messages, ]); json_encode($adapter->toArray());
- 支持 "点" 导航
use Galactium\Space\Translation\Adapter\NestedArray; $messages = [ 'title' => [ 'message' => 'Welcome' ], ]; $adapter = new NestedArray([ 'content' => $messages, ]); echo $adapter->_('title.message'); // prints Welocme
翻译管理器
- 支持回退语言;
- 支持加载器来加载翻译
use Galactium\Space\Translation\Loader\File; use Galactium\Space\Translation\Manager; $mainLanguage = 'en'; $fallbackLanguage = 'ru'; $translationManager = new Manager(new File('/path/to/messages/dir/'), $mainLanguage, $fallbackLanguage);
- 支持分层消息目录
/resources
/messages
/en
/Module
Common.php
Edit.php
$mainLanguage = 'en'; $fallbackLanguage = 'ru'; $translationManager = new Manager(new File('/recourses/messages/'), $mainLanguage, $fallbackLanguage); $translationManager->loadTranslation('Module::Common'); // to load only /recourses/messages/en/Module/Common.php
如果你不需要在 Module
目录中多个语言文件,你可以将同名翻译文件放入其中
/resources
/messages
/en
/Module
Module.php
- 所有加载的翻译都返回在单个 NestedArray 适配器中
$translationManager->getLoadedTranslations() // return Galactium\Space\Translation\Adapter\NestedArray
请注意:翻译管理器仅与 NestedArray 适配器一起工作。
邮件
swiftmailer/swiftmailer 的邮件封装器。
use Galactium\Space\Mail\Manager; use Phalcon\Config; $transport = (new \Swift_SmtpTransport('smtp.service.com', 465, false)) ->setUsername('user_name') ->setPassword('user_password'); $mailer = new \Swift_Mailer($transport); $manager = new Manager($mailer, $transport, new Config([ 'views_dir' => '/path/to/views/dir/', 'from' => [ // define a global 'from' 'email' => 'example@test.com', 'name' => 'My Name' ] ]));
// create your first message: $mailManager->message() ->to('test@test.com') ->subject('Subject') ->body('Text') ->send();
// create using a volt template: $mailManager->message() ->view('volt-template', [ 'user' => Users::findFIrst() ]) ->to('test@test.com') ->subject('Subject') ->send();
// you can pass a callback to manipulate the view instance: $mailManager->message() ->view('volt-template', [ 'user' => Users::findFIrst() ], function (ViewBaseInterface $view) { // code here ... }) ->to('test@test.com') ->subject('Subject') ->send();
你可以在模板中使用 {{ _message }}
来获取对消息实例的访问权限。例如,它可以用来插入嵌入内容中的图像
<img src="{{ _message.embed('/path/to/image.png') }}" alt="my image">
标识符
标识符已被开发出来,可以轻松地将模型的关键参数(如模块、命名空间、表名、标识字段及其值)转换为字符串。标识符管理器可以为实现了 Galactium\Space\Identifier\IdentifiableInterface
接口的模型生成格式为 module::namespace.class.dotted.params
的 GUID(Galactium 唯一标识符)。
class Model implements IdentifiableInterface { public const MODULE_NAME = 'Module' public $id; } class Guids implements IntercatorInterface { public $guid; } $record = Model::findFirst(1); $idetifier = (string) $record->identify(); // return 'module::namespace.model.id.1' $guid = Guids::findFirst(1); $interactedRecord = $guid->interacte() // same that Model::findFirst(1);
默认情况下,标识符仅支持 Galactium 的类结构。
错误管理器
错误管理器为应用提供简单的错误处理。它用于捕获应用生成的所有异常并将它们转换为美观的响应。
SEO
SEO 组件包括
-
面包屑
use Galactium\Space\Seo\Manager; $seoManager = new Manager(); $seoManager->breadcrumbs()->push('title','/link'); $seoManager->get(); // returns Galactium\Space\Seo\Breadcrumbs\Breadcrumb[]
-
元信息
use Galactium\Space\Seo\Manager; $seoManager = new Manager(); $seoManager->metas() ->add(new Titile('Title')) ->add(new Description('Description')) ->add(new Keywords('Keywords')) ->add(new Canonical('/canonical')); foreach($seoManager->metas() as $meta){ echo $meta->render(); }
-
OpenGraph
use Galactium\Space\Seo\Manager; $seoManager = new Manager(); $seoManager->openGraph() ->setType('opengrpah.type') ->setTitle('title') ->setDescription('description') ->if($item->hasImage(), function ($openGraph) use ($item) { $openGraph->setImage($item->getImage()->getSrc()); }) ->setUrl('/href');
-
SchemaOrg(Spatie\SchemaOrg 的工厂)
您可以通过 Galactium\Space\Seo\Manager
获取对所有上述组件的访问权限。
其他改进
\Galactium\Space\Mvc\Model
有一个特殊的字段$append
,你可以轻松地覆盖或向 JSON 添加任何属性。
class Model { protected $append = [ 'full_name' ]; public $id; public $first_name; public $last_name; public function getFullName() { return "{$this->first_name} {$this->last_name}"; } } json_encode(Model::findFirst()); //returns all attrubutes and result of getFullName() method.
请注意:由于某些原因,
$append
在某些情况下不起作用。
许可证
本库采用 Apache 2.0 许可证 - 有关详细信息,请参阅 LICENSE.md 文件。