2016-07-20 4 views
1

У меня интересная ситуация. Я установил caffeinated modules и создал модуль Blog (slug, blog). Существует файл маршрут по умолчанию, содержащийLaravel caffeinated модули маршрут не соответствует

Route::group(['prefix' => 'blog'], function() 
{ 
    Route::get('/', function() 
    { 
     dd('This is the Blog module index page.'); 
    }); 
}); 

Так что, если я иду в http://localhost:8000/blog я ожидал бы увидеть этот текст, однако маршрут не совпадает. Если я добавлю что-нибудь еще, это сработает. Например, я добавил

Route::get('/test', function() 
{ 
    dd('Test.'); 
}); 

к группе маршрутов, и когда я иду в http://localhost:8000/blog/test это работает, я вижу тест. Но/blog все еще не работает.

Теперь все становится еще страннее, я добавил группу маршрутов в мой файл маршрутов по умолчанию:

Route::group(['prefix' => 'blog'], function() 
{ 
    Route::get('/', function() 
    { 
     dd('test'); 
    }); 
}); 

И маршрут работал, вроде. Когда я теперь перехожу к http://localhost:8000/blog я вижу исходный текст из маршрута в модуле, "This is the Blog module index page."

Зачем добавлять группу снова в главном app/Http/routes файла вызвать маршрут в модуле Blogs внезапно начать работать? Почему в модуле Blogs не работает маршрут?

Мне было интересно, возможно, это была проблема с этим модулем, поэтому я попытался создать еще один тест, но у меня были точные результаты с модулем другого имени.

Модули и список маршрутов должным образом, это вывод module:list и route:list, в то время как ошибка возникает.

Модули

+------+----------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+ 
| # | Name   | Slug  | Description                                       | Status | 
+------+----------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+ 
| 9001 | Menu   | menu  | Standard bootstrap menu.                                    | Enabled | 
| 9001 | Module Manager | modman  | Manages modules installed in the site, holding the name and namespace of the module. It also determines which area a module is for (e.g. content, utility, stats etc.) | Enabled | 
| 9001 | Image   | image  | A content area for a single static image.                                | Enabled | 
| 9001 | Content  | content  | Core content module that uses a simple text area and a WYSIWYG editor.                         | Enabled | 
| 9001 | Category  | category | Creates different categories for use with blog posts                             | Enabled | 
| 9001 | CommonArea  | common-area | Common areas are groups of content that are repeated on multiple pages. The two default areas are header and footer.             | Enabled | 
| 9001 | Blog   | blog  | Handles blog articles as pages and has blog preview and menu content types.                       | Enabled | 
+------+----------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------+ 

Маршруты

+--------+--------------------------------+-------------------------------------+--------------------------+--------------------------------------------------------------------------+------------------------------------------------------------+ 
| Domain | Method       | URI         | Name      | Action                 | Middleware             | 
+--------+--------------------------------+-------------------------------------+--------------------------+--------------------------------------------------------------------------+------------------------------------------------------------+ 
|  | GET|HEAD      | acp         | AcpHome     | App\Http\Controllers\[email protected]        | web,auth             | 
|  | GET|HEAD      | acp/blog       | AcpBlogPosts    | App\Http\Controllers\[email protected]        | web,auth             | 
|  | POST       | acp/blog/create      | AcpCreateBlog   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/blog/create      | AcpCreateBlogForm  | App\Http\Controllers\[email protected]       | web,auth             | 
|  | GET|HEAD      | acp/blog/{blog}/delete    | AcpDeleteBlog   | App\Http\Controllers\[email protected]       | web,auth             | 
|  | GET|HEAD      | acp/blog/{blog}/update    | AcpUpdateBlogForm  | App\Http\Controllers\[email protected]       | web,auth             | 
|  | POST       | acp/blog/{blog}/update    | AcpUpdateBlog   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/category      | AcpCategories   | App\Http\Controllers\[email protected]       | web,auth             | 
|  | POST       | acp/category/create     | AcpCreateCategory  | App\Http\Controllers\[email protected]     | web,auth             | 
|  | GET|HEAD      | acp/category/create     | AcpCreateCategoryForm | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/category/{category}/delete  | AcpDeleteCategory  | App\Http\Controllers\[email protected]      | web,auth             | 
|  | POST       | acp/category/{category}/update  | AcpUpdateCategory  | App\Http\Controllers\[email protected]     | web,auth             | 
|  | GET|HEAD      | acp/category/{category}/update  | AcpUpdateCategoryForm | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/content       | AcpContent    | App\Http\Controllers\[email protected]       | web,auth             | 
|  | GET|HEAD      | acp/content-area/{content}   | AcpContentAreaForm  | App\Http\Controllers\[email protected]      | web,auth             | 
|  | POST       | acp/content-area/{content}   | AcpContentArea   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/content/menus     | AcpContentMenus   | App\Http\Controllers\[email protected]       | web,auth             | 
|  | GET|HEAD      | acp/page/column-layout/{template} | AcpGetColumnLayout  | App\Http\Controllers\[email protected]      | web,auth             | 
|  | POST       | acp/page/create      | AcpCreatePage   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/page/create      | AcpCreatePageForm  | App\Http\Controllers\[email protected]       | web,auth             | 
|  | GET|HEAD      | acp/page/new-row     | AcpGetNewRow    | App\Http\Controllers\[email protected]       | web,auth             | 
|  | POST       | acp/page/{id}/update    | AcpUpdatePage   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/page/{id}/update    | AcpUpdatePageForm  | App\Http\Controllers\[email protected]       | web,auth             | 
|  | GET|HEAD      | acp/permissions      | AcpPermissions   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | POST       | acp/permissions/create    | AcpPermissionsCreate  | App\Http\Controllers\[email protected]     | web,auth             | 
|  | GET|HEAD      | acp/permissions/create    | AcpPermissionsCreateForm | App\Http\Controllers\AcpPermissionsCon[email protected]     | web,auth             | 
|  | GET|HEAD      | acp/permissions/{permission}/delete | AcpPermissionsDelete  | App\Http\Controllers\[email protected]      | web,auth             | 
|  | POST       | acp/permissions/{permission}/update | AcpPermissionsUpdate  | App\Http\Controllers\[email protected]     | web,auth             | 
|  | GET|HEAD      | acp/permissions/{permission}/update | AcpPermissionsUpdateForm | App\Http\Controllers\[email protected]     | web,auth             | 
|  | GET|HEAD      | acp/roles       | AcpRoles     | App\Http\Controllers\[email protected]       | web,auth             | 
|  | POST       | acp/roles/create     | AcpRolesCreate   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/roles/create     | AcpRolesCreateForm  | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/roles/{role}/delete    | AcpRolesDelete   | App\Http\Controllers\[email protected]       | web,auth             | 
|  | POST       | acp/roles/{role}/update    | AcpRolesUpdate   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/roles/{role}/update    | AcpRolesUpdateForm  | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/templates      | AcpTemplates    | App\Http\Controllers\[email protected]      | web,auth,advanced           | 
|  | GET|HEAD      | acp/templates/create    | AcpTemplatesCreateForm | App\Http\Controllers\[email protected]     | web,auth,advanced           | 
|  | POST       | acp/templates/create    | AcpTemplatesCreate  | App\Http\Controllers\[email protected]     | web,auth,advanced           | 
|  | GET|HEAD      | acp/templates/{template}/delete  | AcpTemplatesDelete  | App\Http\Controllers\[email protected]      | web,auth,advanced           | 
|  | POST       | acp/templates/{template}/update  | AcpTemplatesUpdate  | App\Http\Controllers\[email protected]     | web,auth,advanced           | 
|  | GET|HEAD      | acp/templates/{template}/update  | AcpTemplatesUpdateForm | App\Http\Controllers\[email protected]     | web,auth,advanced           | 
|  | GET|HEAD      | acp/users       | AcpUsers     | App\Http\Controllers\[email protected]       | web,auth             | 
|  | POST       | acp/users/create     | AcpUsersCreate   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/users/create     | AcpUsersCreateForm  | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | acp/users/{user}/delete    | AcpUsersDelete   | App\Http\Controllers\[email protected]       | web,auth             | 
|  | GET|HEAD      | acp/users/{user}/update    | AcpUsersUpdateForm  | App\Http\Controllers\[email protected]      | web,auth             | 
|  | POST       | acp/users/{user}/update    | AcpUsersUpdate   | App\Http\Controllers\[email protected]      | web,auth             | 
|  | GET|HEAD      | blog        |       | Closure                 | web              | 
|  | GET|HEAD      | blog/test       |       | Closure                 | web              | 
|  | GET|HEAD      | category       |       | Closure                 | web              | 
|  | GET|HEAD      | common-area       |       | Closure                 |               | 
|  | GET|HEAD      | content        |       | Closure                 |               | 
|  | GET|HEAD      | image        |       | Closure                 | web              | 
|  | GET|HEAD      | laravel-filemanager     |       | Unisharp\Laravelfilemanager\controllers\[email protected]    | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/crop   |       | Unisharp\Laravelfilemanager\controllers\Cro[email protected]   | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/cropimage  |       | Unisharp\Laravelfilemanager\controllers\[email protected]  | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/delete   |       | Unisharp\Laravelfilemanager\controllers\[email protected]  | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/deletefolder |       | Unisharp\Laravelfilemanager\controllers\[email protected] | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/doresize  |       | Unisharp\Laravelfilemanager\controllers\[email protected] | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/download  |       | Unisharp\Laravelfilemanager\controllers\[email protected] | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/folders   |       | Unisharp\Laravelfilemanager\controllers\[email protected]  | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/jsonitems  |       | Unisharp\Laravelfilemanager\controllers\[email protected]   | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/newfolder  |       | Unisharp\Laravelfilemanager\controllers\[email protected] | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/rename   |       | Unisharp\Laravelfilemanager\controllers\[email protected]  | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | laravel-filemanager/resize   |       | Unisharp\Laravelfilemanager\controllers\[email protected]  | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD|POST|PUT|PATCH|DELETE | laravel-filemanager/upload   |       | Unisharp\Laravelfilemanager\controllers\[email protected]   | web,auth,\Unisharp\Laravelfilemanager\middleware\MultiUser | 
|  | GET|HEAD      | login        |       | App\Http\Controllers\Auth\[email protected]     | web,guest             | 
|  | POST       | login        |       | App\Http\Controllers\Auth\[email protected]       | web,guest             | 
|  | GET|HEAD      | logout        |       | App\Http\Controllers\Auth\[email protected]       | web              | 
|  | GET|HEAD      | menu        |       | Closure                 |               | 
|  | GET|HEAD      | modman        |       | Closure                 | web              | 
|  | POST       | password/email      |       | App\Http\Controllers\Auth\[email protected]   | web,guest             | 
|  | POST       | password/reset      |       | App\Http\Controllers\Auth\[email protected]      | web,guest             | 
|  | GET|HEAD      | password/reset/{token?}    |       | App\Http\Controllers\Auth\[email protected]    | web,guest             | 
|  | POST       | register       |       | App\Http\Controllers\Auth\[email protected]      | web,guest             | 
|  | GET|HEAD      | register       |       | App\Http\Controllers\Auth\[email protected]   | web,guest             | 
|  | GET|HEAD      | {page?}        | Page      | App\Http\Controllers\[email protected]        | web              | 
+--------+--------------------------------+-------------------------------------+--------------------------+--------------------------------------------------------------------------+------------------------------------------------------------+ 
+0

Что означает именно это 'однако маршрут не match' – revo

+0

@revo Когда я просматриваю на маршрут он не показывает мне текст, вместо этого он заканчивает на моем улове весь маршрут прямо в конце. – Styphon

+0

Вы уверены, что это не конфликт, вызванный тем же самым маршрутом, который определен ранее? (Например, где-то в laravel 'routes.php') – revo

ответ

0

К сожалению я не могу опубликовать комментарий, но php artisan route:list раскрывающие ничего полезного, то есть. вы видите маршрут /blog или /blog/.

+0

Да, я вижу маршрут «блог». Он указан, но он пока не отображается. – Styphon

+0

Странно, возможно, у вас запутался файл кэшированных маршрутов, возможно, очистите кэш 'php artisan route: clear'. Также у вас есть та же проблема с '/ content' и'/category' –

+0

Я попробую маршрут с утра, но да, это происходит для каждого модуля. – Styphon

0

Вы когда-нибудь пробовали добавить дополнительный маршрут до /?

Route::group(['prefix' => 'blog'], function() 
{ 
    Route::get('/check', function() 
    { 
     dd('check'); 
    }); 


    Route::get('/', function() 
    { 
     dd('test'); 
    }); 
}); 

Попробуйте это. Надежда будет работать на вас.

+0

Да, я пробовал это. Дополнительный маршрут работает (я бы посмотрел чек), но маршрут указателя по-прежнему не будет. – Styphon

0

Ваш маршрут зарегистрирован как очевидный из вывода route:list.

Единственная проблема, которую я вижу, заключается в том, что существует маршрут {page?}, который, если он определен до blog, будет вызываться при посещении /blog.

Попробуйте dd() на вашей странице.

+0

'{page?}' - это самый последний маршрут. Это конец в конце. Я знаю, что это так, потому что '/ blog/test' отлично работает. – Styphon

+0

@Styphon '{page?}' Будет захватывать только первый сегмент.Таким образом, он поймает все маршруты отдельных сегментов, а не многосегментные. Таким образом, '/ blog' будет соответствовать не'/blog/test' по этому маршруту. Попробуйте использовать маршрут многосегментного маршрута, который не определен, и проверьте, соответствует ли он маршрутом '{page?}'. – z3r0ck

0

имен параметра в массиве атрибутов группы, чтобы указать пространства имен для всех контроллеров в группе

Route::group(['namespace' => 'blog', 'prefix' => 'blog'], function() 
{ 
    Route::get('/', function() 
    { 
     dd('This is the Blog module index page.'); 
    }); 
}); 
0

Route {странице?} выполняется до модулей и матча один сегментных маршрутов в ваших модулях.

Выполнить этот маршрут, чтобы увидеть порядок ваших маршрутов

Route::get('routes', function() { 
    $router = $this->app->make('router'); 
    $routes = $router->getRoutes(); 

    foreach($routes AS $route) 
    { 
     dump($route->uri()); 
    } 
    dd($routes); 
}); 

Для маршрута:

Route::get('{slug?}', '[email protected]') 
    ->name('page') 
    ->where('slug', '[a-zA-Z0-9_]*'); 

В моем приложении я создал файл App/Routing/Matching/SlugValidator.php

<?php namespace App\Routing\Matching; 

use Illuminate\Http\Request; 
use Illuminate\Routing\Route; 
use Illuminate\Routing\Matching\ValidatorInterface; 
use App\Models\Page; 

class SlugValidator implements ValidatorInterface 
{ 
    /** 
    * Validate a given rule against a route and request. 
    * 
    * @param \Illuminate\Routing\Route $route 
    * @param \Illuminate\Http\Request $request 
    * @return bool 
    */ 
    public function matches(Route $route, Request $request) 
    { 
     if ($route->getName() == 'page') { 
      return (bool) $page = Page::where('slug', '=', $request->segment(1)) 
       ->where('status', '=', PAGE::STATUS_ACTIVE)->count(); 
     } 

     return true; 
    } // matches() 
} // SlugValidator 

И в App/Http/Providers/Ro uteServiceProvider.php в функции загрузки:

use Illuminate\Routing\Route as R; 
use App\Routing\Matching\SlugValidator; 

[ ....] 

public function boot() 
{ 
    R::$validators = array_merge(R::getValidators(), [new SlugValidator]); 
    parent::boot(); 
}