Что Laravel папку контроллер маршрутизации


Что Laravel папку контроллер маршрутизации

17.09.2013 04:57:49 Просмотров 85 Источник

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

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

Я попытался проложить маршрут к контроллеру, но ларавель не нашел его.

Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');

Что я делаю не так?

У вопроса есть решение - Посмотреть?

Ответы - Что Laravel папку контроллер маршрутизации / Laravel Controller Subfolder routing

Antonio Carlos Ribeiro

17.09.2013 05:07:26

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

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

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

Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');

Бежать

composer dump-autoload

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

https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18850746#comment27829246_18850746
я думаю, что вам тоже нужен artisan dump-autoloadили composer dump-autoloadдостаточно?
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18850746#comment27829325_18850746
Для / контроллеров, просто композитор. Но если у вас есть что-то в ClassLoader::addDirectoriesчего нет в composer, вам также понадобится artisan.
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18850746#comment27829359_18850746
Я вдруг вспомнил, что сталкивался с чем-то подобным.. смотрите мой комментарий к ответу ОП
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18850746#comment44014925_18850746
composer dump-autoloadработает и на меня. Если вы используете ОС Windows, вы можете использовать a .bat-файл для запуска composer dump-autoloadвместо того, чтобы каждый раз вводить CMD. Вот что я использую: PUSHD "E:\path\to\non-public" newline START /B "Window 1" composer dump-autoload newline pause
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18850746#comment61009932_18850746
Что, если у нас есть два контроллера с одинаковым именем в forlder1 и folder2? Например: admin / PostsController.php и frontend / PostsController.РНР
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18850746#comment81377982_18850746
Это все еще не работает для меня ( 5.4), является ли Auth специальной папкой? Я переместил ранее работавший контроллер из Controllersв Controllers/Auth, обновил пространство имен, не указал подпапку в web.php, оставил его прежним, очистил маршруты, автопогрузку и кэш, похоже, ничего не помогает.
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18850746#comment102630934_18850746
Мне также пришлось добавить папки (напримерFolder\Class@method)
Tino

17.09.2013 05:19:18

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

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

ClassLoader::addDirectories(array(

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

));
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18851020#comment27818916_18851020
Неправильный. Поскольку / контроллеры уже есть в композиторе Ларавеля.база json, все, что ниже нее, автоматически загружается автоматически. Вам не нужно добавлять / контроллеры / продукт в свой глобальный каталог.РНР.
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18851020#comment27829296_18851020
@AntonioCarlosRibeiro у меня была эта проблема с пытаетесь поставить моделей в папках, но демпинг композитор и ремесленник автозагрузок не похоже на работу. вы должны поставить их на композитора.json или на global.РНР
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/18851020#comment27829392_18851020
Это легко проверить: после запуска composer du откройте vendor / composer/autoload_classmap.php и ваш класс должны быть перечислены там.
Mervyn

26.03.2014 11:12:59

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

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

2.настройте свой код в приложении / маршрутах.РНР

<?php
// index
Route::get('/', 'Home\HomeController@index');

// admin/test
Route::group(
    array('prefix' => 'admin'), 
    function() {
        Route::get('test', 'Admin\IndexController@index');
    }
);
?>

3.напишите sth в app / controllers / admin / IndexController.php, например:

<?php
namespace Admin;

class IndexController extends \BaseController {

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

4.доступ к вашему сайту, например: localhost / admin / test вы увидите "админ.главная" на странице

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

https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/22653943#comment44868395_22653943
Использование пространства имен позволяет избежать столкновения имен. +1
Todor Todorov

07.06.2014 04:49:48

Я использую Laravel 4.2. Вот как я это делаю:
У меня есть структура каталогов, как эта:
апп
--контроллеры
----администратор
------ AdminController.РНР

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

"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

Потом в маршрутах.php у меня контроллер включен вот так:

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

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

https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/24097372#comment37258330_24097372
Работает для меня, и мне нужно только запустить 'composer dump-autoload-o'
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/24097372#comment37579606_24097372
Просто для любого случая я использую также php artisan dump-autoload.
user2014679

15.11.2014 10:23:15

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

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

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

пространство имен Admin\PostsController.php файл вот так:

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

use App\Http\Controllers\Controller;

class PostsController extends Controller {

    //business logic here
}

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

$router->get('/', 'Admin\PostsController@index');

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

composer dump-autoload

или

php artisan dump
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/26943617#comment44608326_26943617
Работал на меня, начиная с 1/23/15. Это может измениться позже, поскольку L5 еще не вышел.
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/26943617#comment47125576_26943617
Спасибо за этот маленький лакомый кусочек. В LV4 вы смогли пропустить оператор 'use App\Http\Controllers\Controller;', поскольку вы расширили BaseController, который наследуется непосредственно от контроллера. Не тот случай в LV5, поскольку он расширяет контроллер напрямую, и PSR-4 autoloading должен знать, где найти контроллер.
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/26943617#comment49219847_26943617
@пользователь ?PHP namespace App\Http \ Controller\Admin; должен быть Controller[s] с s в конце
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/26943617#comment66358590_26943617
Это сработало для меня, с оговоркой, что я должен был добавить "- o" к заявлению composer, например: composer dump-autoload-o
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/26943617#comment81378071_26943617
Это не сработало для меня, сообщение об ошибке теперь говорит App\Http\Controllers\Auth\Controllerне найден, почему он добавляет слово Controllerна там, и теряет фактическое имя контроллера? Я думаю, что это делает Слэш. -oне помогло.
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/26943617#comment81378092_26943617
Хорошо, я выяснил, почему это не работает для меня, я расширял другой контроллер. Я думаю, что теперь я должен расширить полное пространство имен, так как этот контроллер находится в подпапке контроллера, который мне нужно расширить. Наконец-то!
Ariful Haque

24.05.2015 05:20:23

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

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

Структура моих папок:

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

Постапиконтроллер:

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

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

class PostApiController extends Controller {  
...

В Моем Маршруте.php, я установил namespace, и в целом это выглядит так:

Api\V1

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

https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/30419476#comment72847556_30419476
Для Laravel 5.4 это единственное решение, которое я нашел до сих пор.
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/30419476#comment94381015_30419476
Совершенное решение
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/30419476#comment105416472_30419476
Действительно, прекрасно!
Dipen

08.09.2015 05:01:24

php artisan make:controller admin/CategoryController

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

Mahesh Yadav

18.04.2017 02:03:35

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

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

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

Маршруты "маршруты/веб.php " файл будет выглядеть следующим образом

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

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

А для админки раздела это будет выглядеть так

/* 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' => 'DashboardController@index']);                                   
    });
});

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

Koushik Das

24.04.2017 05:25:40

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

В маршруте,

php artisan make:controller User/User

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

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

Является ответом!
Ja22

28.04.2017 10:41:34

Для 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\TestController@getTest');
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/43674716#comment74721271_43674716
есть ли какой-либо способ достичь того же самого для laravel 4.2
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/43674716#comment76553408_43674716
php artisan make:controller test\TestControllerсоздает testTestController.php тогда php artisan make:controller 'test\TestController'работает. (Обратите внимание на цитаты) - Laravel 5.4
https://stackoverflow.com/questions/18850542/laravel-controller-subfolder-routing/43674716#comment84760456_43674716
php artisan make:controller test/TestController
DevonDahon

21.02.2018 03:26:05

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

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

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

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

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

03.01.2019 01:51:39

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

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

\app\Providers\RouteServiceProvider.php

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

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

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

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

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

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

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

Foad Salawati

25.08.2019 08:34:52

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

php artisan make:controller SubFolder\MyController  // true

Не так, как сейчас.:

php artisan make:controller SubFolder/MyController  // false

Затем вы можете получить доступ к контроллеру в routes / web.php как это:

Route::get('/my', 'SubFolder\MyController@index');
Помочь в развитии проекта:
Закрыть X