galactium/space

Galactium Space

v0.4.6 2024-07-08 11:21 UTC

This package is auto-updated.

Last update: 2024-09-08 11:43:50 UTC


README

Codacy Badge

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 文件。