Целевой класс [MyPlaceController] не существует в Laravel 11

Что я делал до ошибки:

1. Я создал новый контроллер в Контроллерах с именем MyPlaceController.


namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyPlaceController extends Controller
{
    public function index()
    {
        return 'this is my place';
    }
}

2. После шага 1 я зашел в web.php и написал код:


use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::get('/my_page', 'MyPlaceController@index');

3. Запускаем сайт с command php artisan serve После этого шага я получил сообщение об ошибке с текстом. Целевой класс [MyPlaceController] не существует.

Illuminate\Contracts\Container\BindingResolutionException Целевой класс [MyPlaceController] не существует.

4. Я пытался создать эти файлы самостоятельно, но не получилось (я также пытался создать эти файлы с помощью cmd, но после создания не было строки с именем protected $namespace 'App\\Http\\Controllers)

В видеокурсе по Laravel автор использовал 10 версию. Для решения этой проблемы он подошел к файлу RouteServiceProvider.php и раскомментировал строку с текстом: protected $namespace 'App\\Http\\Controllers' и после этого действия сайт снова заработал, но в моей 11 версии эти файлы нет, и поэтому я не могу сделать то же, что и он. Еще напишу, что из всех 5 файлов в Провайдерах у меня есть только один файл с именем AppServiceProvider.php (но у автора 5 файлов как на картинке). Авторские файлы:

  • AppServiceProvider.php
  • AuthServiceProvider.php
  • BroadcastServiceProvider.php
  • EventServiceProvider.php
  • МаршрутServiceProvider.php

А также я хочу показать структуру моего проекта: Структура моего проекта

(на всякий случай прошу прощения, возможно мой вопрос был поставлен не очень корректно)

«но в моей версии 11 этих файлов нет». Теперь такие вещи должны предоставляться по-другому в bootstrap/app.php.

LazyOne 17.06.2024 11:47

Лучше используйте синтаксис [MyPlaceController::class, 'index'] вместо 'MyPlaceController@index' и импортируйте этот класс в свой web.php (чтобы он имел строку типа use App\Http\Controllers\MyPlaceController;) — см. пример здесь: laravel.com/docs/11.x/controllers#basic-controllers

LazyOne 17.06.2024 12:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
148
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
use App\Http\Controllers\MyPlaceController;
    
Route::get('/my_page', [MyPlaceController::class,'index']);

Это правильный синтаксис для определения маршрутов в Laravel 11. Это структура каталогов по умолчанию в Laravel 11.

Большое спасибо. Проблема решена благодаря вашему ответу! :)

d.shved 17.06.2024 12:58

Другие вопросы по теме