You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel应用Artisan Serve正常,XAMPP部署后部分功能失效求助

解决Laravel部署到XAMPP后表单405错误及用户ID获取失败问题

看起来你遇到了两个关联的问题:视图中用户ID获取失败,以及部分POST请求返回405方法不允许。我来一步步帮你排查解决:

1. 先解决 "Trying to get property 'id' of non-object" 错误

你怀疑的那段代码确实是问题所在:当用户未登录时,Auth::user()会返回null,直接访问->id就会抛出这个错误。本地用php artisan serve时你可能一直保持登录状态,所以没触发这个问题,但手机访问时可能会话未同步,或者用户未登录就打开了反馈页面。

修复方案:

  • 给路由添加登录保护:确保只有登录用户能访问反馈页面,在路由定义时加上auth中间件:
    // routes/web.php
    Route::get('/feedback', [FeedbackController::class, 'show'])->middleware('auth');
    
  • 在视图中增加登录判断:避免直接访问未登录用户的属性:
    <div id="app">
        @auth
            <survey-component :user_id="{{ Auth::user()->id }}"></survey-component>
        @else
            <div class="alert alert-info">请先登录后提交反馈哦</div>
        @endauth
    </div>
    
  • 可选链式调用(Laravel 8+):如果允许未登录用户访问页面,只是组件处理null值,可以用可选操作符:
    <survey-component :user_id="{{ Auth::user()?->id }}"></survey-component>
    
    这样未登录时会传递null,你可以在Vue组件里判断并处理这种情况。

2. 解决405 Method Not Allowed错误

这个错误通常和请求方法不匹配、CSRF令牌缺失,或者Apache路由配置有关,结合你的场景,重点排查这几点:

排查点1:路由请求方法是否匹配

检查你的routes/web.php或routes/api.php中,对应表单提交的路由方法是否和Axios的POST请求一致。比如如果Axios发的是POST,路由不能定义成GET:

// 正确的POST路由定义
Route::post('/submit-survey', [SurveyController::class, 'store']);

排查点2:CSRF令牌是否正确携带

Laravel默认会拦截未携带CSRF令牌的POST请求,本地开发时会话和令牌同步正常,但手机用IP访问时可能出现令牌缺失的情况:

  • 页面头部添加CSRF meta标签:在你的母版页(比如layouts/app.blade.php)里添加:
    <meta name="csrf-token" content="{{ csrf_token() }}">
    
  • 配置Axios自动携带令牌:在你的Vue入口文件(比如app.js)里添加:
    import axios from 'axios';
    window.axios = axios;
    
    window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content;
    

排查点3:XAMPP的Apache配置是否正确

很多部署问题都源于Apache未正确指向Laravel的public目录,或者mod_rewrite未开启:

  • 确保虚拟主机指向public目录:修改XAMPP的httpd-vhosts.conf文件,将DocumentRoot设置为项目的public文件夹:
    <VirtualHost *:80>
        DocumentRoot "C:/xampp/htdocs/projects/Centralsocial/public"
        ServerName 192.168.x.x  # 替换成你的本地IP
    </VirtualHost>
    
  • 开启mod_rewrite模块:打开XAMPP的httpd.conf,确保这行没有被注释:
    LoadModule rewrite_module modules/mod_rewrite.so
    
  • 设置AllowOverride All:在httpd.conf中找到对应项目目录的配置块,设置:
    <Directory "C:/xampp/htdocs/projects/Centralsocial/public">
        AllowOverride All
        Require all granted
    </Directory>
    
    这样Apache才能解析Laravel的.htaccess文件,正确处理路由。

最后验证步骤

  1. 重启XAMPP的Apache服务,确保配置生效
  2. 手机重新连接同一局域网,用IP访问页面
  3. 先登录账号,再测试表单提交,看是否还会出现405错误和用户ID报错

内容的提问来源于stack exchange,提问作者Cedrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:51:07