2015-04-12 6 views
1

Я строй международного сайта, поэтому мне удалось URL, похожий /{language}/{other_stuff} поблагодарить некоторые манипуляции в RouteServiceProviderNamespaced маршрутов не работают в Laravel 5

/** 
* Define the routes for the application. 
* 
* @param \Illuminate\Routing\Router $router 
* @return void 
*/ 
public function map(Router $router, Request $request) 
{ 

    $locale = $request->segment(1); 
    $this->app->setLocale($locale); 

    /** 
    * Internationalization routing system 
    */ 
    $router->group(['namespace' => $this->namespace, 'prefix' => $locale], function($router) use ($locale) { 

     if ($locale == 'en') require app_path('Http/routes_en.php'); 
     elseif ($locale == 'el') require app_path('Http/routes_el.php'); 

    }); 

} 

работает как шарм. У каждого языка будет свой собственный файл маршрута, это выбор.

Допустим, мы идем к /en/ и вы админ, я создал другое пространство имен в Http/route_en.php сосредоточиться на секции администратора:

Route::group(['namespace' => 'Admin', 'prefix' => 'admin'], function() { 

    Route::controller('', 'DashboardController'); 

    Route::controller('brands', 'BrandsController'); 
    Route::controller('contents', 'ContentsController'); 
    Route::controller('downloads', 'DownloadsController'); 
    Route::controller('news', 'NewsController'); 
    Route::controller('products', 'ProductsController'); 
    Route::controller('settings', 'SettingsController'); 
    Route::controller('users', 'UsersController'); 

}); 

Так что теперь я должен получить доступ легко разделы, такие как /en/admin/brands, но он не , Я генерировать все мои ссылки динамически благодаря классу HTML

{!! HTML::linkAction('Admin\[email protected]', 'Brands') !!} 

поколение отлично работает, когда я иду в /en/admin, что означает Admin\[email protected] обнаружен этот пакет, но при нажатии на нее

Sorry, the page you are looking for could not be found. 

I проверил некоторые вещи, и когда я просто установил маршрут за пределами group(), он отлично работает.

Route::controller('admin/brands', 'Admin\BrandsController'); 

Что мне здесь не хватает? Разве класс HTML и система маршрутизации не согласуются друг с другом? Есть ли какая-то ошибка, которую я сделал? Может, проблема?

EDIT: Я открыл an issue for this problem on GitHub

+0

В вашем пространстве маршрутов '' '' 'Route :: group''' в поле' '' 'Route :: group''' следует заменить 'Admin' на 'App \ Http \ Controllers \ Admin' –

+0

' App класса \ Http \ Controllers \ App \ Http \ Контроллеры \ Admin \ DashboardController не существует. К сожалению, это не сработает. – Laurent

ответ

2

Так что никто не пытался мне помочь.

Через несколько дней, проблема и множество тестов, я сам понял эту проблему: вам нужно положить маршрут DashboardController в конце, иначе система маршрутизации возьмет его первым и проигнорирует остальные.

/** 
    * Admin 
    */ 
    Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'is.admin'], function() { 

    Route::controller('news', 'NewsController'); 
    Route::controller('brands', 'BrandsController'); 
    Route::controller('products', 'ProductsController'); 
    Route::controller('users', 'UsersController'); 
    Route::controller('downloads', 'DownloadsController'); 
    Route::controller('settings', 'SettingsController'); 
    Route::controller('contents', 'ContentsController'); 

    Route::controller('', 'DashboardController'); 

    }); 

Примечание: Все будет казаться хорошо в маршруте список, и даже в HTML/Форма упаковки, но это не так.

Я позволю ему здесь для всех, у кого были бы подобные проблемы.

+1

Это решило проблемы с вложенными контроллерами. – blakroku

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