最近由于一直在用 DRPC 和后台的 Java 端进行通信,所以找了不少方法来解决数据通信时候的强类型问题。
在 laravel 中有一个很厉害的类,能实现像 model 一样的数组 + 对象两种方式访问的功能,并且还能转换成 array 和 json。
use Illuminate\Support\Fluent;
就是继承以上这个类。 来做个演示
class XXXRequest extends \Illuminate\Support\Fluent
{
protected $attributes = [
'fieldID' => '',
'fieldTitle' => '',
'fieldContent' => '',
];
public function __construct($attributes = [])
{
foreach ($attributes as $key => $value) {
if (array_key_exists($key, $this->attributes)) {
$this->attributes[$key] = $value;
}
}
}
public function __set($key, $value)
{
if (array_key_exists($key, $this->attributes)) {
$this->attributes[$key] = $value;
}
}
public function offsetUnset($offset)
{
}
public function toArray()
{
array_walk($this->attributes, function(&$item, $key){
//java 端只识别字符串和bool
$item = is_bool($item) ? $item: (string) $item;
});
return $this->attributes;
}
public function toJson($options = JSON_UNESCAPED_UNICODE)
{
return json_encode($this->toArray(), $options);
}
}
以上就是我和 java 的 DRPC 通信时候所用的请求对象, 这个类能直接像数组一样访问,并且可以带有各种对象功能。 在发送通信的时候只要直接
$xxx->toJson();
就可以放心的把一个健壮的 Json 直接发送给 java 端,然后 java 端也可以安全的读取。 其他的功能,读者可以自己发掘。
Fluent 这个类就是实现了 ArrayAccess
from : http://laravel.so/tricks/6df11571b6d32e55dcbbe89845ce7fff
沒有留言:
張貼留言