Skip to main content

Appendable

Trait Appendable 

Source
pub trait Appendable: BaseModel + Accessor {
    // Required methods
    fn append_state(&self) -> &AppendState;
    fn append_state_mut(&mut self) -> &mut AppendState;

    // Provided methods
    fn append_dyn(&mut self, fields: Vec<String>) -> &mut Self { ... }
    fn append_merge(&mut self, fields: Vec<String>) -> &mut Self { ... }
    fn effective_append(&self) -> Vec<String> { ... }
    fn to_json_with_append_cached(&mut self) -> Value { ... }
}
Expand description

Appendable trait — 对齐 PHP append() + getAttr() 统一派发

业务模型实现此 trait 获得:

  1. 动态 append 能力(覆盖/合并,对齐 PHP Conversion.php 第 88-97 行)
  2. append 字段走 get_attr 缓存(对齐 PHP Conversion.php 第 292 行 + Attribute.php 第 475-486 行)

§与 BaseModel 的关系

业务模型按需实现 Appendable 获得完整 PHP 对齐能力。

§PHP 对齐

PHP 方法Rust 等价说明
$this->appendAppendState动态 append 状态
append($fields)Self::append_dyn()覆盖模式(默认)
append($fields, true)Self::append_merge()合并模式
toArray() 中 append 循环Self::to_json_with_append_cached()走 getAttr 缓存

Required Methods§

Source

fn append_state(&self) -> &AppendState

取动态 append 状态

Source

fn append_state_mut(&mut self) -> &mut AppendState

取可变动态 append 状态

Provided Methods§

Source

fn append_dyn(&mut self, fields: Vec<String>) -> &mut Self

动态 append(覆盖模式,对齐 PHP $model->append($fields)

默认覆盖静态 BaseModel::append(),返回 &mut Self 支持链式调用 (对齐 PHP Conversion.php 第 96 行 return $this)。

Source

fn append_merge(&mut self, fields: Vec<String>) -> &mut Self

动态 append(合并模式,对齐 PHP $model->append($fields, true)

PHP 语义(Conversion.php 第 91-93 行):array_merge($this->append, $fields)。 首次合并时 $this->append 为静态默认值,需保留;后续合并累加到当前动态字段。

Source

fn effective_append(&self) -> Vec<String>

获取生效的 append 字段列表

优先级:动态 append > 静态 BaseModel::append() 对齐 PHP $this->append(动态覆盖后静态失效)

Source

fn to_json_with_append_cached(&mut self) -> Value

序列化为 JSON(包含 append 字段,走访问器缓存)

对齐 PHP toArray() 第 234-236 行 + Attribute.php getAttr

  1. 先取基础 to_json(已应用 hidden 过滤)
  2. 对每个生效 append 字段调用 get_attr(带缓存)
  3. append 字段始终输出(无访问器返回 null,对齐 PHP 第 292 行)
  4. append 字段绕过 hidden 过滤(PHP bug 复刻,对齐第 291-296 行)

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§