【发布时间】:2017-06-22 01:03:58
【问题描述】:
使用 Laravel Spark,如果我想为 configureTeamForNewUser 换一个新的实现,起初看起来这是可能的,因为这里调用了 Spark::interact
#File: spark/src/Interactions/Auth/Register.php
Spark::interact(self::class.'@configureTeamForNewUser', [$request, $user]);
即框架使用Spark::interact 调用configureTeamForNewUser,这意味着我可以Spark::swap 它。
但是,如果我查看 configureTemForNewUser 方法本身
#File: spark/src/Interactions/Auth/Register.php
public function configureTeamForNewUser(RegisterRequest $request, $user)
{
if ($invitation = $request->invitation()) {
Spark::interact(AddTeamMember::class, [$invitation->team, $user]);
self::$team = $invitation->team;
$invitation->delete();
} elseif (Spark::onlyTeamPlans()) {
self::$team = Spark::interact(CreateTeam::class, [
$user, ['name' => $request->team, 'slug' => $request->team_slug]
]);
}
$user->currentTeam();
}
此方法为私有$team 类属性分配一个值。我的理解是,如果我使用 Spark::swap 我的回调将被调用而不是原始方法。初步测试证实了这一点。但是,由于我的回调无法设置$team,这意味着我的回调会以一种会破坏其他火花功能的方式改变系统的行为。
以上是对系统的正确理解吗?还是我遗漏了什么,可以在另一个函数调用中swap(以某种方式调用原始configureTeamForNewUser)?
【问题讨论】:
标签: php laravel laravel-spark