【问题标题】:Laravel 5.3 - Route not defined, maybe because of same name?Laravel 5.3 - 未定义路线,可能是因为同名?
【发布时间】:2016-11-25 21:45:04
【问题描述】:

在加载我的网页时,我不断遇到问题(路径未定义)。

这是我的路线(主要关注底部2条路线:

Route::group(['middleware' => ['web']], function()
{
    Route::get('/', function ()
    {
        return view('welcome');
    })->name('home');

    Route::post('/signup', [
        'uses' => 'UserController@postSignUp',
        'as' => 'signup'
    ]);

    Route::post('/signin', [
        'uses' => 'UserController@postSignIn',
        'as' => 'signin'
    ]);

    Route::get('logout', [
        'uses' => 'UserController@getLogout',
        'as' => 'logout'
    ]);

    Route::get('profile', [
        'uses' => 'UserController@profile',
        'as' => 'profile'
    ]);

    Route::post('profile', [
        'uses' => 'UserController@updateAvatar',
        'as' => 'profile'
    ]);

    Route::group(['middleware' => ['auth']], function()
    {
        Route::get('/dashboard',[
            'uses' => 'UserController@getDashboard',
            'as' => 'dashboard',
            'middleware' => 'auth'
        ]);
    });

    Route::get('charities', [
        'uses' => 'UserController@charities',
        'as' => 'charities'
    ]);

    Route::resource('charities','charityController');

});

由于它们具有相同的名称,我认为这可能会导致错误,但我不太确定。

用户控制器:

<?php

namespace App\HTTP\Controllers;

use App\User;
use Illuminate\HTTP\Request;
use Illuminate\Support\Facades\Auth;
use Image;
use Input;

class UserController extends Controller
{
    public function getDashboard()
    {
        return view('dashboard');
    }

    public function postSignUp(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email|unique:users',
            'name' => 'required|max:100',
            'password' => 'required|min:4'
        ]);

        $email = $request['email'];
        $name = $request['name'];
        $password = bcrypt($request['password']); //bcrypt = hash password

        $user = new user();
        $user->email = $email;
        $user->name = $name;
        $user->password = $password;

        $user->save();

        Auth::login($user);

        return redirect()-> route('dashboard');
    }

    public function postSignIn(Request $request)
    {

        $this->validate($request, [
            'email' => 'required|',
            'password' => 'required'
        ]);

        if (Auth::attempt(['email' => $request['email'], 'password' => $request['password']]))
        {
            return redirect()->route('dashboard');
        }

        return redirect()->back();
    }

    public function getLogOut()
    {
        Auth::logout();
        return redirect()->route('home');
    }

    public function profile()
    {
        return view('profile', array('user' => Auth::user()));
    }

    public function updateAvatar(Request $request)
    {
        if($request->hasFile('avatar'))
        {
            $avatar = $request->file('avatar');
            $filename = time(). '.' . $avatar->getClientOriginalExtension();
            Image::make($avatar)->resize(300,300)->save( public_path('/uploads/avatar/' . $filename) );

            $user = Auth::user();
            $user->avatar = $filename;
            $user->save(); 
        }

        return view('profile', array('user' => Auth::user()));
    }

    public function charities()
    {
        return view('charities');
    }
}

?>

CharityController 包含以下函数:

    public function index()
    {
        $charities = charities::all();
        return view('charities', ['charities' => $charities]);
    }

这是慈善页面的链接:

<a href="{{ route('charities') }}"> Charities </a> </li>

这是我在对数据库中的慈善机构进行迭代时使用的变量:

@foreach ($charities as $charity)

我看到的错误是:

路线 [慈善机构] 未定义。 (看法: C:\wamp64\www\webproject\resources\views\profile.blade.php)

当我从路线中注释掉这一行时:

Route::resource('charities','charityController');

然后错误消失,个人资料页面正常工作,反之亦然。

【问题讨论】:

  • 我的回答对你有帮助吗?

标签: php laravel laravel-5.3


【解决方案1】:

问题是:Route::resource('charities','charityController'); 已经包含 get routes 并且你之前定义过

Route::get('charities', [
    'uses' => 'UserController@charities',
    'as' => 'charities'
]);

所以你可以删除这个get,或者如果有必要你可以保留它,然后将你的名字命名为Route::resource('charities','charityController');

喜欢:

Route::resource('charities', 'AdminUserController', ['parameters' => [ 'charities' => 'admin_user' ]]); 则视为/charities/{admin_user} 更多信息:https://laravel.com/docs/5.3/controllers#restful-naming-resource-routes

希望有意义

【讨论】:

  • Rahul,你的意思是分割路线?
  • @Jay,我用参考更新了我的答案。关联。希望它会帮助你。谢谢
【解决方案2】:

你应该删除这些行

Route::get('charities', [
    'uses' => 'UserController@charities',
    'as' => 'charities'
]);

并在视图中使用这条路线

<a href="{{ route('charities.index') }}"> Charities </a> </li>

您似乎在制作冗余路由和控制器功能。由于 charities 是资源控制器,因此这些是可用的路线

charities.index
charities.create
charities.store
charities.edit
charities.update
charities.destroy

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2023-03-29
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多