【问题标题】:laravel route to controller being called twicelaravel 到控制器的路由被调用两次
【发布时间】:2017-12-12 22:34:34
【问题描述】:

我仍在学习 laravel,并使用 v5.4.28 创建了一个项目,也使用 dev v5.5 进行了测试,这两个版本都调用了控制器两次,因此插入了 2 条记录。 仅当我使用 WAMP 并访问 http://localhost/laravel/public/test?test=123

时才会发生这种情况

如果我使用 php artisan serve 并访问它 http://127.0.0.1:8000/test?test=123 它只插入一次

如果我使用 chrome 检查并查看我的网络选项卡,我会看到该页面在 wamp 上被调用了两次。

这正常吗?

将我的路线/web.php 编辑为

Route::get('/', function () {
return view('home');
});
Route::get('/test', 'testController@store');

并创建了一个 testController

class testController extends Controller
{
    public function store()
    {
        $test = new Test;
        $test ->user_id = request('test');
        $test ->save();

        //if i put a redirect here then it wont insert twice
    }
}

【问题讨论】:

  • 所以当你插入两次数据时,user_if 是什么样子的?
  • 也给我们提供输入表单
  • 哦,它看起来完全一样 id 是自动递增的,所以 id :1 ,user_id :123 id :2 ,user_id :123 -> 第二个条目没有输入。这只是为了测试,所以我使用 GET 参数 test?test=123 我使用了测试变量并将其设置为 URL 上的 123。然后我就插入那个。一切都适用于 php artisan serve。另一方面,Wamp 加载页面两次,因此插入了两次记录。
  • 无论如何,我认为问题出在 WAMP 上。使用XAMPP,没有这样的问题。现在可以关闭了

标签: php laravel wamp laravel-artisan


【解决方案1】:

如果您有一个中间件对next 进行双重调用,也会发生这种情况。例如,假设您有一个父中间件的句柄函数:

public function handle($request, Closure $next, ...$guards){
    // Your logic here
    return $next($request);
}

现在,假设您有一个子中间件,如下所示:

public function handle($request, Closure $next, ...$guards){
    // Note this call to the parent's next
    $resp = parent::handler($request, $next, $guards);
    // Extra logic here
    // ... and now we make another call to next
    return $next($request);
}

为避免这种情况,请确保在中间件的句柄函数中调用 next

https://laracasts.com/discuss/channels/laravel/controller-methods-called-twice-causing-duplicate-database-entries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2016-06-28
    • 2023-03-27
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多