2015-05-23 4 views
5

Я боролся с этой проблемой в течение часа, и я не уверен, что я сделал неправильно. Так вот так. Я хотел создать папку контроллера, переходя группу разных контроллеров в свои группы. По проектам Laravel по умолчанию создает структуру папок контроллера, как этотПравильный способ создания контроллеров под подпапкой в ​​laravel 5

Http 
--Controller 
----Auth 

Так что я хотел бы сделать, это сделать что-то вроде этого

Http 
--Controller 
----Auth 
----Folder_a 
----Folder_b 
----Folder_c 

После того, мои папки, контролеры в моих папках также должным образом в пространстве имен, как так

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

    /* 
    |-------------------------------------------------------------------------- 
    | Use the main controller to allow extend to the main controller 
    |-------------------------------------------------------------------------- 

    */ 

    use App\Http\Controllers\Controller; 

class SomethingController extends Controller { 
     /* Do something here*/ 
} 

И, наконец, в моем routes.php я называю действия, как такой

Route::get('/action1/', array('as' => 'action1', 'uses' => '[email protected]')); 

Но некоторые, как, когда я пытаюсь перейти на этот сайт дает мне эту ошибку

ReflectionException in compiled.php line 1029: 
Class App\Http\Controllers\SomethingController does not exist 

Замечено, что она по-прежнему идти в папку по умолчанию App \ Http \ Контроллеры \ найти контроллер, но если я сделать так:

Route::get('/action1/', array('as' => 'action1', 'uses' => 'Folder_a\[email protected]')); 

Тогда все будет хорошо ... Что я сделал не так в этом случае? также я пробовал компоновщик dump-autoload, ничего не изменилось.

ответ

6

Вы ничего не сделали. Это ожидаемое поведение! По умолчанию Laravel будет искать указанный контроллер относительно App\Http\Controllers. Таким образом, вы должны указать пространство имен. Если у вас есть много маршрутов, которые ведут к контроллеру в Folder_a вы можете использовать маршрутную группу, чтобы очистить вещи:

Route::group(['namespace' => 'Folder_a'], function(){ 
    Route::get('/action1/', array('as' => 'action1', 'uses' => '[email protected]')); 
    // more routes 
}); 
+0

Я вижу ... Большое вам спасибо за то, что помогли мне прояснить ситуацию ... Я думал, что пропустил что-то здесь и там ... Привет, друг! –

0

Я не думаю, что есть необходимость в контроллерах группы в папках. У вас будет в основном 1 контроллер для каждого ресурса, и каждый ресурс - это его собственная вещь. Нет ничего плохого, если у вас есть 50-100 контроллеров. Если вы поместите их в папки, вы получите много папок, поэтому вложение файлов не поможет.

Запустите нормально, а затем рефакторинг, если вам действительно нужно.

+0

Я действительно не согласен с этим. Контроллеры не всегда обрабатывают один ресурс или ресурс. Подпапки пригодится, когда у вас есть пользовательские действия для админов (Admin \ UserController), поэтому вам не нужно связываться с промежуточным программным обеспечением авторизации в одном контроллере (какие методы разрешены для текущего пользователя, а это нет?). Другим примером является структурирование конечных точек API (API \ V1, API \ V2 и т. Д.). Эти структуры папок также часто соответствуют вашим маршрутам (/ admin/users,/api/v2) - для меня хорошо выглядит организованная структура приложения. Но, как это часто бывает, это зависит от размера ваших приложений :) – tommy

+0

Да, вы правы, я, наверное, что-то пропустил с моим ответом. Я больше думал, что Folder_a содержит AController, Folder_b содержит BController. Вот почему я подумал, что это плохая идея. – Ruffles

+0

Да, вы правы, в этом случае это не имеет смысла: P – tommy