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

Laravel 10路由跳转异常:访问/projects却返回首页的问题排查

问题原因及解决方法

核心原因

  • 路由控制器指向错误:你的/projects路由配置中,调用的是HomepageController的index方法,而非你编写的项目控制器,导致返回首页视图。
  • 控制器命名与规范不符:你编写的控制器类名为小写projects,不符合Laravel大驼峰命名规范(应为ProjectsController),且缺少正确的命名空间声明,系统无法正确识别。
  • Blade视图未正确继承模板:projects.blade.php仅定义了@section('content'),但未通过@extends引入模板文件,导致模板无法渲染该部分内容,最终显示模板默认的首页内容。

解决步骤

1. 修正路由配置

将/projects路由指向正确的控制器:

Route::get('/', [App\Http\Controllers\HomepageController::class, 'index'])->name('homepage');

// 修正为指向ProjectsController的index方法
Route::get('/projects', [App\Http\Controllers\ProjectsController::class, 'index'])->name('projects');

2. 规范控制器文件

  • 控制器文件名改为ProjectsController.php(放置在app/Http/Controllers目录下)
  • 修正控制器代码,添加命名空间并使用大驼峰类名:
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProjectsController extends Controller
{
    public function index()
    {
        return view('projects');
    }
}

3. 修正Blade视图继承

在projects.blade.php顶部添加@extends引入你的模板文件(假设模板文件为layouts/app.blade.php,请根据实际路径调整):

@extends('layouts.app')

@section('content')
    <main>
        <a href="{{ route('upload') }}"> Make a project </a> <!-- 建议用路由命名跳转,而非直接写blade文件名 -->
    </main>
@endsection

同时确保你的模板文件(如layouts/app.blade.php)中存在@yield('content'),用于渲染该部分内容:

<!-- 模板文件示例 -->
<!DOCTYPE html>
<html>
<head>
    <title>My App</title>
</head>
<body>
    @yield('content')
</body>
</html>

4. 清除路由缓存(可选)

如果之前生成过路由缓存,执行以下命令清除:

php artisan route:clear

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:10:53