2017-02-22 10 views
1

У меня есть частичный успех реорганизации общих маршрутов laravel в класс. В настоящее время я пытаюсь найти контроллер.Рефактор Laravel Маршруты

Вот основной образец, который я рефакторинг. Я нужен один и тот же шаблон для vendors, users, terminals и т.д.

Route::group(['middleware' => ['csrf','DashboardAuthenticate'], 'namespace' => 'App\Http\Controllers'], function() { 

    Route::get('vendors/', '[email protected]'); 
    Route::get('vendors/create', '[email protected]'); 
    Route::get('vendors/{id}', '[email protected]'); 
    Route::post('vendors/search', '[email protected]'); 
    Route::put('vendors/', '[email protected]'); 
    Route::delete('vendors/', '[email protected]'); 

    Route::get('roles/', '[email protected]'); 
    Route::get('roles/create', '[email protected]'); 
    Route::get('roles/{id}', '[email protected]'); 
    Route::post('roles/search', '[email protected]'); 
    Route::put('roles/', '[email protected]'); 
    Route::delete('roles/', '[email protected]'); 

    Route::get('users/', '[email protected]'); 
    Route::get('users/create', '[email protected]'); 
    Route::get('users/{id}', '[email protected]'); 
    Route::post('users/search', '[email protected]'); 
    Route::put('users/', '[email protected]'); 
    Route::delete('users/', '[email protected]'); 

    Route::get('terminals/', '[email protected]'); 
    Route::get('terminals/create', '[email protected]'); 
    Route::get('terminals/{id}', '[email protected]'); 
    Route::post('terminals/search', '[email protected]'); 
    Route::put('terminals/', '[email protected]'); 
    Route::delete('terminals/', '[email protected]'); 
}); 

реорганизовать Я сделал класс, который выглядит следующим образом: (файл класса CIRoute находится под App \ Classes \ Маршруты имен)

class CIRoutes 
{ 
    public static function addRoutes($name) 
    { 
     $n2 = ucfirst($name); 
     Route::get($name.'s/', $n2.'[email protected]'); 
     Route::get($name.'s/create', $n2.'[email protected]'); 
     Route::get($name.'s/{id}', $n2.'[email protected]'); 
     Route::post($name.'s/search', $n2.'[email protected]'); 
     Route::put($name.'s/', $n2.'[email protected]'); 
     Route::delete($name.'s/', $n2.'[email protected]'); 
    } 
} 

Затем я создаю маршрут:

CIRoutes::addRoutes('vendors'); 

Я думал, что это работает нормально, но я ошибся. В настоящее время php artisan route:list возвращается с Class App\Http\Controllers\RolesController does not exist, который он делает - я имею в виду, что он отлично работает без рефакторинга.

Как я могу реорганизовать общий шаблон маршрута?

+0

этот код работает правильно - я звоню маршрут с множественное число от названия модели, что неверно. 'CIRoutes :: addRoutes ('users');' должно быть 'CIRoutes :: addRoutes ('user');'. duh duh duh – Iannazzi

ответ

0

Я думаю, что лучше сохранить ваши маршруты в файле route/web.php вместо класса и использовать групповой метод для их организации.

Route::group(['prefix' => 'vendors'], function() { 

    Route::get('/', function() { 
     // Matches The "/vendors/" URL 
    }); 
    Route::get('/create', function() { 
     // Matches The "/vendors/create" URL 
    }); 

}); 

Группа также допускает маршрутизацию промежуточного программного обеспечения, поддоменов и пространств имен.

Далее, поскольку ваш класс создает типичный маршрут CRUD, вы можете просто использовать:

Route::resource('vendors', 'VendorsController'); 

Чтобы создать следующие маршруты:

Verb  URI      Action  Route Name 
GET   /vendors    index   vendors.index 
GET   /vendors/create   create  vendors.create 
POST  /vendors    store   vendors.store 
GET   /vendors/{vendor}  show   vendors.show 
GET   /vendors/{vendor}/edit edit   vendors.edit 
PUT/PATCH /vendors/{vendor}  update  vendors.update 
DELETE  /vendors/{vendor}  destroy  vendors.destroy 

Обратите внимание, что Laravel автоматически отображает все маршруты в маршрутов/web.php к вашему «web» промежуточное ПО и App \ Http \ Controllers пространство имен в App \ Providers \ RouteServiceProvider класс.

/** 
* Define the "web" routes for the application. 
* 
* These routes all receive session state, CSRF protection, etc. 
* 
* @return void 
*/ 
protected function mapWebRoutes() 
{ 
    Route::group([ 
     'middleware' => 'web', 
     'namespace' => $this->namespace, 
    ], function ($router) { 
     require base_path('routes/web.php'); 
    }); 
} 

Так что, если вы все еще хотите использовать класс, чтобы определить ваши маршруты, вы должны сгруппировать маршруты в классе и назначить им пространство имен App \ Http \ Контроллеры и «паутина» промежуточное программное обеспечение.

Сетевое промежуточное программное обеспечение гарантирует, что эти маршруты обеспечивают такие функции, как состояние сеанса и защита CSRF.

Таким образом, вы могли бы, вероятно, (я не проверял) сделать что-то вроде:

public static function addRoutes($name) 
{ 

    Route::group([ 
     'middleware' => 'web', 
     'namespace' => 'App\Http\Controllers', 
    ], function() use ($name) { 

     $n2 = ucfirst($name); 
     Route::get($name.'s/', $n2.'[email protected]'); 
     Route::get($name.'s/create', $n2.'[email protected]'); 
     Route::get($name.'s/{id}', $n2.'[email protected]'); 
     Route::post($name.'s/search', $n2.'[email protected]'); 
     Route::put($name.'s/', $n2.'[email protected]'); 
     Route::delete($name.'s/', $n2.'[email protected]'); 

    }); 

} 
+0

Все хорошие вещи ... Я использовал route :: resource, мои маршруты немного отличаются, поскольку я добавляю/ищу, и я не использую/не редактирую ... js обрабатывает это. Я пытался добавить свою собственную функцию «ресурс». Мои маршруты находятся под защитой промежуточного ПО, я не показал вам это в моем примере. Они также группируются под пространством имен.Тогда ваш последний пример - это именно то, что я пытался, что приводит меня к контроллеру, которого нет. – Iannazzi

+0

@CraigIannazzi Определили ли вы пространство имен? –

+0

Да, я обновил свой вопрос, чтобы вы могли видеть пространство имен. Я также переместил пространство имен в 'CIRoutes', чтобы убедиться, что это проблема. Затем я врылся в источник laravel, чтобы посмотреть, как был создан маршрут :: resource. Довольно потеряно, похоже, у меня будет огромный файл маршрута. – Iannazzi

Смежные вопросы