【问题标题】:Laravel 5.4 Route [project.view] not definedLaravel 5.4 Route [project.view] 未定义
【发布时间】:2017-09-05 15:51:47
【问题描述】:

好的,所以我有一个页面,我可以在其中加载我的项目供访问者观看:

@extends('layouts.master')

@section('title', 'Projects')

@section('content')
    <div class="container">
        <div class="contact-wrapper ">
            <h1 class="text-center">Project overview</h1>
            @foreach($projects as $project)
                <div class="col-md-4 no-padding">
                    <div class="project-image col-md-12 no-padding">
                        <a href="{{ route('project.view', $project->id) }}">
                            <img src="{{ $project->image }}" class="col-md-12 image">
                            <p class="image-text">
                                {{ $project->title }}
                            </p>
                        </a>
                    </div>
                </div>
            @endforeach
        </div>
    </div>
@stop

但我会收到以下错误:

Route [project.view] not defined. (View: /home/vagrant/Code/test/resources/views/projects.blade.php)

虽然我在我的 web.php 路由文件中定义了它,如下所示

<?php


Auth::routes();


Route::get('/', 'HomeController@welcome');


Route::group(['middleware' => ['web']],  function() {
    Route::resource('user', 'UserController', ['only' => ['index', 'show']]);
    Route::resource('project', 'ProjectController', ['only' => ['index', 'show', 'view']]);
    Route::resource('blog', 'BlogController', ['only' => ['index', 'show']]);
    Route::resource('review', 'ReviewController', ['only' => ['index', 'show']]);
});

Route::group(['middleware' => ['auth']], function () {
    Route::resource('user', 'UserController', ['only' => ['store', 'update', 'destroy', 'create', 'edit', 'search', 'cms']]);
    Route::resource('project', 'ProjectController', ['only' => ['store', 'update', 'destroy', 'create', 'edit', 'search', 'cms']]);
    Route::resource('blog', 'BlogController', ['only' => ['store', 'update', 'destroy', 'create', 'edit', 'search', 'cms']]);
    Route::resource('review', 'ReviewController', ['only' => ['store', 'update', 'destroy','create', 'edit', 'search', 'cms']]);
    Route::get('/home', 'HomeController@index');
});

在我的 ProjectController.php 中,我定义了如下所示的函数

 public function view($id)
    {

        $projects = Project::findOrFail($id);

        $users = User::all();

        $userArray = [];
        foreach ($users as $user) {
            $userArray[$user->id] = $user->username;
        }


        return view('project.view', compact('projects', 'userArray'));
    }

我已了解资源控制器如何只能处理标准的索引/显示/更新等功能,但我怎样才能正确路由它以便它只是我的来自 ProjectController 的功能?

我在正确的文件夹中有视图,并且我 99% 确定我已正确调用它们。视图的路径是:resources/views/project/view.blade.php

提前致谢!

【问题讨论】:

  • 你是对的资源控制器默认路由是 laravel 定义的。我的意思是showstore 等,当你必须在资源控制器中添加更多方法时,你的情况 view 你必须用Route::get('project-view','ProjectController@view') 写一个新的路由类似的东西。

标签: php laravel-5 controller routing


【解决方案1】:

正如您已经提到的,资源控制器仅处理默认的 CRUD 操作。据我所知,您不能覆盖此行为(无论如何都不是有意的)

https://laravel.com/docs/5.4/controllers#resource-controllers

如果你想给你的路由命名不同,你可以“重命名”它,但是如果你想添加其他路由/动作到你的控制器,你必须为它定义单独的路由(比如 Route::get, Route: :post 等)

【讨论】:

    猜你喜欢
    • 2017-10-25
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2018-08-23
    • 2021-11-30
    相关资源
    最近更新 更多