【发布时间】:2021-10-11 22:55:09
【问题描述】:
//profile.blade.php
<form action="{{ $isFollowing ? route('unfollow', $user->username) : route('follow', $user->username) }}" method="post">
@csrf
<button type="submit">{{ $isFollowing ? 'Unfollow' : 'Follow' }}</button>
</form>
// ProfileController.php
public function index()
{
$reqUsername = request()->route()->parameter('username');
$user = User::where('username', $reqUsername)
->with(['followers', 'records' => function($query) {
$query->with('likes');
}])
->firstOrFail();
if ($user->followers->count()) {
foreach ($user->followers as $follower) {
$isFollowing = $follower->id == auth()->id();
}
} else {
$isFollowing = false;
}
return view('users.profile', [
'user' => $user,
'isFollowing' => $isFollowing
]);
}
我最近在将 Laravel 应用程序部署到 Heroku 时遇到了问题。请注意,直到最近,这在生产中一直运行良好。上面的 sn-ps 在使用 Laravel Valet 的开发中仍然可以正常工作;但是,在生产环境中,$isFollowing 变量始终以 bool(false) 的形式返回到视图中,无论数据是否显示我们所在的用户正在被当前经过身份验证的用户关注。
到目前为止我尝试过的事情;
-
dd($isFollowing)在生产中。我希望当我们到达路线时这会显示真或假,在生产中,我看到假前有一个插入符号 =>^ False。 -
显式设置所有条件值和比较,即
if ($user->followers->count() > 0)而不是if ($user->followers->count())。
我目前正在研究的内容;
- 可能是对某个 composer 包(或 PHP/Laravel/Composer 版本)的更新导致了这个问题吗?我自己没有对这些进行任何更改,所以这可能是 Heroku 的自动更新?
在此先感谢您对此问题的任何帮助。
【问题讨论】:
-
您能否确认
dd的任何其他变量或静态值转储为^? -
我可以确认插入符号在其他变量中也很明显。示例
dd($user->username)转储^ "my_username" -
在您错误地添加
^的任何文件中。尝试在整个项目中查找。希望对您有所帮助。 -
不幸的是,没有。就像我在 OP 中解释的那样,这个问题只在生产服务器上很明显,
$isFollowing变量是应用程序中唯一没有拉到视图的数据。这让我认为dd()中的插入符号问题不会导致问题,因为其他数据(例如用户和关注者数量)正常。我不知道是什么原因造成的。 -
如果这有一段时间有效,但不再有效,那么发生了什么变化?你升级了 PHP 版本,或者 Laravel 版本,或者那个服务器上的其他任何东西?
标签: php laravel heroku composer-php laravel-blade