【问题标题】:Laravel return view is not working, error page shows up insteadLaravel 返回视图不起作用,而是显示错误页面
【发布时间】:2021-06-30 02:31:03
【问题描述】:

我正在尝试返回现有视图,但出现“404 not found”。我是初学者,我还不太了解 Laravel。任何想法为什么显示错误 404 而不是显示页面?我已经尝试过“使用视图”,但仍然没有任何效果。 PostsController.php:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;
use Cviebrock\EloquentSluggable\Services\SlugService;

class PostsController extends Controller
{
     /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return view('blog.index')
            ->with('posts', Post::orderBy('updated_at', 'DESC')->get());
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('blog.create');
    }
    /**
     * Display the specified resource.
     *
     * @param  string  $slug
     * @return \Illuminate\Http\Response
     */

//NOT WORKING THIS
    public function show($slug)
    {
        return view('blog.show')->with('post', Post::where('slug', $slug)->first());
    }
...

show.blade.php:

@extends('layouts.app')

@section('content')

<div class="w-full m-auto text-center">
    <div class="py-15 border-b border-gray-200 w-full">
        <h1 class="text-4xl uppercase">
            {{ $post->title }}
        </h1>
    </div>
</div>

<div class="px-5">
    <span class="text-gray-500">
    By <span class="font-bold italic text-gray-800">{{$post->user->name}}</span>
    , Uploaded on {{date('jS M Y', strtotime($post->updated_at))}}
    </span>

    <p class="text-xl text-gray-700 pt-8 pb-10 leading-8 font-light">
        {{ $post->description }}
    </p>
</div>

@endsection

这些是我的路线。 web.php

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PagesController;
use App\Http\Controllers\PostsController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', [PagesController::class, 'index']);

Route::resource('/mods', PostsController::class);

Auth::routes();

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

【问题讨论】:

  • 发布您的路线
  • @sta 我发布了它们
  • 确保 show.blade.php 位于正确的文件夹中 (../resources/views/blog/show.blade.php)
  • 它在那里,是的
  • 你需要定义路由

标签: php html laravel


【解决方案1】:

没有足够的信息,但您可以自己按照以下调试步骤进行。

  1. 确定是您的路线问题还是视图问题。 更有可能是你的路由而不是视图。因为如果 Laravel 找不到你的视图文件,你会看到 InvalidArgumentException 错误。在返回之前添加一个调试代码。例如,您可以在 return 语句之前添加 dd()。如果您的请求到达正确的路线,您将看到一个调试 dd 而不是 404
  2. 如果您没有看到dd()。问题不在于您的观点,而在于您的路线。你可以做的是尝试清除你的路由缓存php artisan route:clear 这将清除路由文件缓存。
  3. 当您像这样编写路由文件时
Route::resource('/mods', PostsController::class)

你使用的是 Laravel 自带的默认 RESTful resource controller 模式。所以,在幕后,你的表演路线实际上是这样的

Route::get('/mods/{mods}', 'PostsController@show');

确保您的请求转到正确的路线。为此,您可以运行 php artisan route:list 来验证路由是否正确,并与请求初始化程序进行比较,无论是链接还是 ajax。

【讨论】:

    猜你喜欢
    • 2018-11-22
    • 2016-10-23
    • 2019-10-17
    • 2020-10-03
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2017-10-28
    相关资源
    最近更新 更多