我有一个 Laravel 控制器,有两种方法:createOrder 和 getStatus。在 create 方法中,我尝试设置属性
$orderId
来存储 orderId 值,在 get 方法中,我想使用 dd($this->orderId)
访问并显示该值。
class XXXPaymentController extends Controller
{
protected $orderId;
public function createOrder(){
// ... create an $order
$this->orderId = $order->id;
}
public function getStatus(){
dd($this->orderId); // return null
}
}
但是,由于 Laravel 为每个请求创建一个新的控制器实例,因此 getStatus 方法返回 null,因为它是一个不同的实例。
这具体是一个付款请求,我需要在这两种方法之间保留
$orderId
。我怎样才能在 Laravel 中实现这一目标?对于不同的请求,是否有推荐的方法在控制器中的方法之间共享数据?
除了会话和缓存之外,您还可以使用服务类,将其注入到控制器的构造函数中,并保留 order_id。
创建一个像这样的界面,
interface OrderIdServiceInterface
{
public function storeOrderId(int $orderId);
public function getOrderId();
}
然后创建一个服务来实现该服务,如下所示,
class OrderIdService implements OrderIdServiceInterface
{
private $orderId;
public function storeOrderId(int $orderId)
{
$this->orderId = $orderId;
}
public function getOrderId(): int
{
return $this->orderId;
}
}
然后在构造函数中将此服务类注入到控制器中。
class XXXPaymentController extends Controller
{
private $orderIdService;
public function __construct(OrderIdServiceInterface $orderIdService)
{
$this->orderIdService = $orderIdService;
}
public function createOrder(){
// ... create an $order
$this->orderIdService->storeOrderId($order->id);
}
public function getStatus(){
dd($this->orderIdService->getOrderId());
}
}