td/framework

10 Degrees 基础主题和插件框架

dev-main 2022-01-11 16:10 UTC

This package is auto-updated.

Last update: 2024-09-11 22:09:36 UTC


README

10 Degrees 框架是一系列组件,旨在简化开发过程。

该框架具有命名空间化的 wp-cli 命令和一系列常用命令。

安装

composer require td/framework

组件

Acf

高级自定义字段服务提供商和命令。

app/Acf/Blocks 目录中创建一个 Block

wp td make:block BlockName

然后,将块类名添加到 AcfServiceProvider 中的 $blocks 属性。块将由服务提供商加载。

字段组

app/Acf/FieldGroups 目录中创建一个 FieldGroup

wp td make:field-group FieldGroupName

然后,将字段组类名添加到 AcfServiceProvider 中的 $fieldGroups 属性。字段组将由服务提供商加载。

控制台

Console 组件是核心命令服务,用于框架中所有 make 命令。

基础

基础组件包括基础应用程序和核心框架服务和命令。

邮件

Mailer 类提供了一个用于编写电子邮件的流畅接口。

app/Mail 目录中创建一个 Mail

wp td make:mail UserRegistered

邮件器类提供了一个构造函数,用于传递参数给类,以及一个 build 方法来构建邮件。

构建方法应包含不可更改的逻辑,例如电子邮件主题和模板。当调用可邮寄项时,您可以添加特定的电子邮件属性,如 toccbcc 地址。

<?php

namespace App\Mail;

use TenDegrees\Mail\Mailer;

class UserRegistered extends Mailer
{
    /**
     * The registration pdf file path
     *
     * @var string
     */
    protected $attachment;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(string $attachment)
    {
        $this->attachment = $attachment;
    }

    /**
     * Build the message.
     *
     * @return \TenDegrees\Mail\Mailer
     */
    public function build(): Mailer
    {
        return $this->from('support@10degrees.uk')
                    ->subject('Thanks for registering')
                    ->attachment($this->attachment)
                    ->markdown('emails.registered');
    }
}

一旦加载了 wp_mail 函数,就可以发送邮件,因此您应该用 add_action('init')Mail 类包装起来,以确保函数可用。

<?php

use App\Mail\UserRegistered;
use Tendegrees\Database\Models\User;
use Tendegrees\Support\Facades\Mail;
use WP_User;

// pass an email string:
Mail::to('email@example.com')->send(new UserRegistered());
Mail::to('Name <email@example.com>')->send(new UserRegistered());

// pass a WP_User instance:
Mail::to(wp_get_current_user())->send(new UserRegistered());

// pass a User model instance
Mail::to(User::find(1))->send(new UserRegistered());

// you can test your emails by using the render method.
echo Mail::render(new UserRegistered());

toccbcc 方法非常灵活,可以接受以下内容:

  • 一个字符串
  • 一个 WP_User 实例
  • 一个用户实例
  • 上述数组的集合
  • 上述集合的集合

路由

路由定义在 routes/ajax.phproutes/api.php 文件中。

使用 ajax 方法定义 AJAX 路由。 $uri 指的是 "action" 参数。 $action 参数是 ClosureController 类名。

Route::ajax($uri, $action);

例如

// wp-admin/admin-ajax.php?action=ajax_action
Route::ajax('ajax_action', function () {
    return td_view('ajax.view');
});

使用 getpostputpatchdeleteoptionsanymatches 方法定义 REST 路由。 $uri 是 REST 端点(不带命名空间)和 $actionClosureController 类名。

// Standard HTTP methods
Route::get($uri, $action);
Route::post($uri, $action);
Route::put($uri, $action);
Route::patch($uri, $action);
Route::delete($uri, $action);
Route::options($uri, $action);

// or you can specify any:
Route::any($uri, $action); // GET, HEAD', POST, PUT, PATCH, DELETE, OPTIONS

// or you can match certain methods:
Route::matches(['PUT', 'PATCH'], $uri, $action)

例如

// wp-json/api/rest/action
Route::get('rest/action', function () {
    return ['data' => []];
});

REST URI 解析以允许传递参数

Route::get('users/{id}', function(int $id) {
    return (new WP_User($id))->to_array();
});

路由操作

路由 "操作" 可以是闭包

Route::ajax('ajax_action', function () {
    return td_view('ajax.view');
});

...或者一个 Controller

Route::ajax('ajax_action', AjaxActionController::class); // will use the __invoke method

可以定义特定的方法

Route::ajax('ajax_action', [AjaxActionController::class, 'index']);

控制器 🚧

app/Http/Controllers 目录中创建一个 Controller

wp td make:controller LoginController

AJAX 和 REST 控制器是相同的

中间件 🚧

app/Http/Middleware 目录中创建一个 Middleware

wp td make:middleware VerifyApiKey

UrlGenerator

URLGenerator 类将许多 WordPress URL 函数整合到一个 api 中,可以使用 URL 门面使用。

URL::home() // https://example.com
URL::to('members') // https://example.com/members
URL::login() // https://example.com/wp-login.php?redirect_to=%2F
URL::logout() // https://example.com/wp-login.php?action=logout&amp;redirect_to=%2F&amp;_wpnonce=dd5186a703
URL::register() // https://example.com/wp-login.php?action=register
URL::ajax('ajax_action') // https://example.com/wp-admin/admin-ajax.php?action=ajax_action
URL::admin() // https://example.com/wp-admin/
URL::rest('api/rest-action') // https://example.com/wp-json/api/rest-action
URL::redirect('/') // wp_redirect(); die();
URL::current()
URL::full()
URL::previous()
URL::isValidUrl('https://example.com')

支持 🚧

支持包括 ServiceProviderPipelineFacades

视图

一个视图类,用于轻松包含模板。视图存储在 views 目录中。

View::make 方法接受从 views 目录相对于的路径,这可以使用点来表示目录。例如:

/views/posts/single.php 将会被转换为 posts.single

第二个参数是一个可选的数组,它将被提取到模板中。

$post = get_post(1);

echo View::make('posts.single', compact('post'));

<!-- /views/posts/single.php -->

<h1><?php echo $post->post_title; ?></h1>

WordPress 🚧

WordPress 服务提供者和命令。

app/WordPress/PostTypes 目录中创建一个 PostType

wp td make:post-type PostTypeName

app/WordPress/Shortcodes 目录中创建一个 Shortcode

wp td make:shortcode ShortcodeName