在 Laravel Framework 6.18.35 中我使用 "nwidart/laravel-modules": "^7.2", 我在路径中定义指向方法 wrinnten 的路径时出错。
在模块/页面/路由/web.php 我有:
Route::prefix('pages')->group(function() {
Route::get('/', 'PagesController@index');
Route::resource('/admin/page_types', 'Admin\PageTypesController');
});
它使用方法引用 comtroller Modules/Pages/Http/Controllers/Admin/PageTypesController.php :
class PageTypesController extends Controller
{
public function index()
{
\Log::info( '-1 PageTypesController index ::' . print_r( -1, true ) );
return view('pages::admin.page_types.index');
}
带有模板 Modules/Pages/Resources/views/admin/page_types/index.blade.php,其中有参考:
<div class="col-12 col-sm-6 mb-3 mt-1 pl-2">
<input type="submit" class="btn btn-primary" value="Search" onclick="javascript:backendPageType.runSearch(oTable); return false;" id="btn_run_search">
<a onclick="javascript:document.location='{{ route('pages.admin.page_types.create') }}'" class="a_link">
<small> ( Add )</small>
</a>
</div>
这会引发错误:
Route [pages.admin.page_types.create] not defined. (View: /mnt/_work_sdb8/wwwroot/lar/lar6/Modules/Pages/Resources/views/admin/page_types/index.blade.php)
我尝试了几种设置路线的方法,但都失败了。
修改#2: 我看到路线:
php artisan route:list
Modules\Pages\Http\Controllers\PagesController@index | web |
| | GET|HEAD | pages/admin/{admin}/page_types | admin.page_types.index | Modules\Pages\Http\Controllers\Admin\PageTypesController@index | web |
| | POST | pages/admin/{admin}/page_types | admin.page_types.store | Modules\Pages\Http\Controllers\Admin\PageTypesController@store | web |
| | GET|HEAD | pages/admin/{admin}/page_types/create | admin.page_types.create | Modules\Pages\Http\Controllers\Admin\PageTypesController@create | web |
| | GET|HEAD | pages/admin/{admin}/page_types/{page_type} | admin.page_types.show | Modules\Pages\Http\Controllers\Admin\PageTypesController@show | web |
| | PUT|PATCH | pages/admin/{admin}/page_types/{page_type} | admin.page_types.update | Modules\Pages\Http\Controllers\Admin\PageTypesController@update | web |
| | DELETE | pages/admin/{admin}/page_types/{page_type} | admin.page_types.destroy | Modules\Pages\Http\Controllers\Admin\PageTypesController@destroy | web |
| | GET|HEAD | pages/admin/{admin}/page_types/{page_type}/edit | admin.page_types.edit | Modules\Pages\Http\Controllers\Admin\PageTypesController@edit | web |
我想知道为什么有这么多“{admin}/”? 内容位于 Modules/Pages/Routes/web.php 中:
Route::prefix('pages')->group(function() {
Route::get('/', 'PagesController@index');
Route::resource('admin.page_types', 'Admin\PageTypesController');
});
哪个是正确的语法?
要创建嵌套资源,Laravel 允许您对资源使用点表示法:
Route::resource('admin.page_types', 'Admin\PageTypesController');
要通过运行
php artisan route:list
检查已注册的路由,它会输出一个有用的表格,显示路由名称以及 URL 和控制器方法。
或者,为资源创建另一个组:
Route::prefix('pages')->group(function() {
Route::get('/', 'PagesController@index');
Route::prefix('admin')->group(function() {
Route::resource('page_types', 'Admin\PageTypesController');
});
});