Подтвердить что ты не робот

Маршрутизация подпапки контроллера Laravel

Я новичок в Laravel. Чтобы попытаться сохранить мое приложение, я хотел бы поместить мои контроллеры в подпапки папки контроллера.

controllers\
---- folder1
---- folder2

Я попытался перейти к контроллеру, но laravel его не нашел.

Route::get('/product/dashboard', '[email protected]');

Что я делаю неправильно?

4b9b3361

Ответ 1

Для Laravel 5.3 выше:

php artisan make:controller test/TestController

Это создаст test папку, если она не существует, а затем создаст TestController внутри.

TestController будет выглядеть так:

<?php
namespace App\Http\Controllers\test;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class TestController extends Controller
{
    public function getTest()
    {
        return "Yes";
    }
}

Затем вы можете зарегистрировать свой маршрут следующим образом:

Route::get('/test','test\[email protected]');

Ответ 2

Добавьте свои контроллеры в свои папки:

controllers\
---- folder1
---- folder2

Создайте свой маршрут, не указав папку:

Route::get('/product/dashboard', '[email protected]');

Запустить

composer dump-autoload

И попробуйте еще раз

Ответ 3

Для тех, кто использует Laravel 5, вам нужно установить пространство имен для контроллера внутри подкаталога (Laravel 5 все еще находится в разработке, и изменения происходят ежедневно)

Чтобы получить структуру папок, например:

Http
----Controllers
    ----Admin
            PostsController.php
    PostsController.php

namespace Admin\PostsController.php файл следующим образом:

<?php namespace App\Http\Controller\Admin;

use App\Http\Controllers\Controller;

class PostsController extends Controller {

    //business logic here
}

Тогда ваш маршрут для этого:

$router->get('/', 'Admin\[email protected]');

И, наконец, не делайте ни композитор, ни кустарник

composer dump-autoload

или

php artisan dump

Ответ 4

1.Создайте свою подпапку, как показано ниже:

app
----controllers
--------admin
--------home

2. сконфигурируйте свой код в app/routes.php

<?php
// index
Route::get('/', 'Home\[email protected]');

// admin/test
Route::group(
    array('prefix' => 'admin'), 
    function() {
        Route::get('test', 'Admin\[email protected]');
    }
);
?>

3.write sth в приложении/контроллерах/admin/IndexController.php, например:

<?php
namespace Admin;

class IndexController extends \BaseController {

    public function index()
    {
        return "admin.home";
    }
}
?>

4.доступьте свой сайт, например: localhost/admin/test вы увидите "admin.home" на странице

ps: Пожалуйста, проигнорируйте мой плохой английский

Ответ 5

Для ** Laravel 5 или Laravel 5.1 LTS **, если у вас есть несколько контроллеров в папке администратора, Route::group будет действительно полезной для вас. Например:

Обновление: работает с Laravel 5.4

Моя папка Структура:

Http
----Controllers
    ----Api
          ----V1
                 PostsApiController.php
                 CommentsApiController.php
    PostsController.php

PostAPIController:

<?php namespace App\Http\Controllers\Api\V1;

use App\Http\Requests;
use App\Http\Controllers\Controller;   
use Illuminate\Http\Request;

class PostApiController extends Controller {  
...

В My Route.php я установил для группы namespace значение Api\V1 и в целом это выглядит так:

Route::group(
        [           
            'namespace' => 'Api\V1',
            'prefix' => 'v1',
        ], function(){

            Route::get('posts', ['uses'=>'[email protected]']);
            Route::get('posts/{id}', ['uses'=>'[email protected]']);

    });

Для перемещения деталей для создания подпапки перейдите по этой ссылке.

Ответ 6

Просто нашел способ, как это сделать:

Просто добавьте пути к /app/start/global.php

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/controllers/product',
    app_path().'/models',
    app_path().'/database/seeds',

));

Ответ 7

php artisan make:controller admin/CategoryController

Здесь admin - это подкаталог в приложении /Http/Controllers и CategoryController - это контроллер, который вы хотите создать внутри каталога

Ответ 8

Я использую Laravel 4.2. Вот как я это делаю:
У меня есть структура каталогов, подобная этой:
приложение
--controllers
---- admin
------ AdminController.php

После того, как я создал контроллер, я поместил в composer.json путь к новому каталогу admin:

"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/admin",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
}, 

Далее я запустил

composer dump-autoload

а затем

php artisan dump-autoload

Затем в route.php у меня есть контроллер, включенный вот так:

Route::controller('admin', 'AdminController');

И все работает нормально.

Ответ 9

Если вы используете Laravel 5.3 или выше, вам не нужно вникать в такую ​​сложность, как говорили другие ответы. Просто используйте команду artisan по умолчанию для создания нового контроллера. Например, если я хочу создать контроллер User в папке User. Я бы напечатал

php artisan make:controller User/User

В маршрутах

Route::get('/dashboard', 'User\[email protected]');

делать это было бы хорошо, и теперь на localhost/dashboard находится страница, на которой находится страница.

Надеюсь, что это поможет.

Ответ 10

В Laravel 5.6 предполагается, что имя вашей подпапки ' Api:

В вашем контроллере вам нужны эти две строки:

namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;

И в вашем файле маршрута api.php вам нужно:

Route::resource('/myapi', 'Api\MyController');

Ответ 11

Я думаю, что держать контроллеры для Admin и Front в отдельных папках, пространство имен будет работать хорошо.

Посмотрите на нижерасположенную структуру каталогов Laravel, которая отлично подходит для меня.

app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.php

Маршруты в файле "routes/web.php" будут ниже

/* All the Front-end controllers routes will work under Front namespace */

Route::group(['namespace' => 'Front'], function () {
    Route::get('/home', '[email protected]');
});

И для раздела Admin он будет выглядеть как

/* All the admin routes will go under Admin namespace */
/* All the admin routes will required authentication, 
   so an middleware auth also applied in admin namespace */

Route::group(['namespace' => 'Admin'], function () {
    Route::group(['middleware' => ['auth']], function() {            
        Route::get('/', ['as' => 'home', 'uses' => '[email protected]']);                                   
    });
});

Надеюсь, это поможет!

Ответ 12

Вот как вы можете организовать свое приложение:

Каждый файл маршрута (web.php, api.php...) объявляется в методе map(), в файле

\app\Providers\RouteServiceProvider.php

Когда вы отображаете файл маршрута, вы можете установить для него ->namespace($this->namespace), вы увидите его там среди примеров.

Это означает, что вы можете создавать больше файлов, чтобы сделать ваш проект более структурированным!

И установите разные пространства имен для каждого из них.

Но я предпочитаю установить empty string для пространства имен ""

Это дает вам возможность настроить ваши контроллеры для маршрутизации собственным способом php, см. Пример:

Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');

Теперь вы можете дважды щелкнуть имена контроллеров в IDE, чтобы быстро и удобно туда добраться.

Ответ 13

У меня недавно была эта проблема с Laravel 5.8, но я недооцениваю, что я должен правильно определить контроллер следующим образом:

php artisan make:controller SubFolder\MyController  // true

не так:

php artisan make:controller SubFolder/MyController  // false

тогда вы можете получить доступ к контроллеру в маршрутах /web.php следующим образом:

Route::get('/my', 'SubFolder\[email protected]');