【问题标题】:Need help fixing a Laravel PageController class error需要帮助修复 Laravel PageController 类错误
【发布时间】:2021-09-10 12:49:59
【问题描述】:

每当我尝试单击本地主机站点上的按钮时,例如管理用户 我得到了错误:

目标类 [App\Http\Controllers\App\Http\Controllers\Admin\PagesController] 确实 不存在。

我尝试了很多不同的方法来修复它,但我只是不知道如何修复它。我也在这样的论坛上问过,但我得到的建议都没有帮助。

这是我的页面控制器的代码:

    <?php

namespace App\Http\Controllers\Admin;

use Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\WorkWithPage;
use App\Models\Page;
use Illuminate\Http\Request;

class PagesController extends Controller
{

    public function __construct() {
        $this->middleware('admin');
    }
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        if (Auth::user()->isAdminOrUser()) {
            $pages = Page::paginate(5);
        } else {
            $pages = Auth::user()->pages()->paginate(5);
        }
        return view('admin.pages.index', ['pages' => $pages]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('admin.pages.create')->with(['model' => new Page()]);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(WorkWithPage $request)
    {
        //
        Auth::user()->pages()->save(new Page($request->only([
            'title','url','content'])));

        return redirect()->route('pages.index')->with('status', 'The page has been created.');
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function edit(Page $page)
    {
        if(Auth::user()->cant('update', $page)) {
            return redirect()->route('pages.index');
        }

        return view('admin.pages.edit', ['model' => $page]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function update(WorkWithPage $request, Page $page)
    {
        if(Auth::user()->cant('update', $page)) {
            return redirect()->route('pages.index');
        }
        $page->fill($request->only([
            'title','url','content']));

        $page->save();
        return redirect()->route('pages.index')->with('status', 'The page has been updated');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Page  $page
     * @return \Illuminate\Http\Response
     */
    public function destroy(Page $page)
    {
        if(Auth::user()->cant('delete', $page)) {
            return redirect()->route('pages.index');
        }
    }
}

这是我的 web.php 路由的代码:

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| 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('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/admin', function() {
    return view('admin.index');
})->middleware('admin');

Route::resource('/admin/pages', \App\Http\Controllers\Admin\PagesController::class, ['except' => [
    'show'
]]);

Route::resource('/admin/users', \App\Http\Controllers\Admin\UsersController::class, ['except' => [
    'create','store','show'
]]);

Route::get('/home', 'HomeController@index')->name('home');

Route::get('/home', 'HomeController@index')->name('home');

【问题讨论】:

  • 我只需要找出如何阻止它复制 App\Http\Controllers 部分并寻找它两次

标签: laravel


【解决方案1】:

web.php 路由文件的开头添加控制器

use App\Http\Controllers\Admin\PagesController;
use App\Http\Controllers\Admin\UsersController;

然后将您的路线定义为

Route::prefix('admin')->group(function () {
    Route::resource('pages', PagesController::class);
    Route::resource('users', UsersController::class);
});

【讨论】:

    【解决方案2】:

    可能错误是因为您在调用控制器时忘记输入[]

    修改这个:

    Route::resource('/admin/pages', \App\Http\Controllers\Admin\PagesController::class, ['except' => [
        'show'
    ]]);
    Route::resource('/admin/users', \App\Http\Controllers\Admin\UsersController::class, ['except' => [
        'create','store','show'
    ]]);
    

    作者:

    Route::resource('/admin/pages', [\App\Http\Controllers\Admin\PagesController::class], ['except' => [
            'show'
        ]]);
    Route::resource('/admin/users', [\App\Http\Controllers\Admin\UsersController::class], ['except' => [
                'create','store','show'
            ]]);
    

    【讨论】:

      【解决方案3】:

      你必须进入你的app/Providers/RouteServiceProvider.php文件并评论这一行:

      protected $namespace = 'App\\Http\\Controllers';
      //should be
      //protected $namespace = 'App\\Http\\Controllers';
      

      如果你这样做了,你就可以在声明你的路线时使用你正在使用的这个符号:

      Route::get('something', [\Fully\Qualified\Namespace::class, 'method']);
      

      但是,这些路线将不再适用:

      Route::get('/home', 'HomeController@index')->name('home');
      
      // since there are no more default namespace, you must use 
      // Route::get('/home', '\App\Http\Controllers\HomeController@index');
      // or 
      // Route::get('/home', [\App\Http\Controllers\HomeController::class, 'index']);
      

      您必须选择您使用的路由声明样式并为所有路由坚持它。

      现在,Route::get('something', [\Fully\Qualified\Namespace::class, 'method']) 是您应该使用的。

      【讨论】:

      • 我刚刚尝试添加这个,不确定我是否添加了错误或者它是否是其他东西但出现了同样的错误。但是,如果我将 '\\' 设为单而不是双并删除引号,则会出现完全不同的错误
      • 抱歉,我是 laravel 的初学者
      • 没问题,每个人在某些时候都是初学者!我向您保证这是您正在寻找的答案,我可以在我这边重现您完全相同的问题。只需删除所有其他路线,只保留那些需要的路线,在所有地方使用相同的符号。
      • 如果您不取消注释RouteServiceProvider.php 文件中的行,那么您的所有路由的命名空间都以\App\Http\Controllers 为前缀。由于您在声明路线时也使用此命名空间,因此您会得到这些奇怪的双 \App\Http\Controllers\App\Http\Controllers\Admin\PageController 东西。
      • 只有一个问题,你使用的是什么版本的 Laravel?这很重要,因为 Laravel 8 中有些事情发生了变化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多