我想在我的laavel应用程序中显示同一个Slug上的不同内容.

下面的代码对帖子和页面很有吸引力,所以如果插件与页面/帖子插件匹配,它就会加载内容.

Routes/web.php:

/// ADMIN ROUTES
Route::middleware(['web', 'auth'])->prefix('admin')->group(function () {
    Route::get('/', [AdminController::class, 'index'])->name('admin');
    Route::resource('roles', RoleController::class);
    Route::resource('pages', BackendPageController::class);
    Route::resource('permissions', PermissionController::class);
    Route::resource('posts', BackendPostController::class);
    Route::resource('users', UserController::class);
    Route::resource('packages', PackageController::class);

    Route::delete('/users', [UserController::class, 'deleteAll'])->name('users.delete');
    Route::delete('/pages', [BackendPageController::class, 'delete'])->name('pages.delete');
    
    Route::prefix('modules')->group(function () {
        Route::get('/', [ModuleController::class, 'index'])->name('modules.index');
        Route::get('/enable/{moduleName}', [ModuleController::class, 'enable'])->name('modules.enable');
        Route::get('/disable/{moduleName}', [ModuleController::class, 'disable'])->name('modules.disable');
    });
});


/// FRONTEND ROUTES
Route::middleware('web')->group(function () {
    Route::get('/', [ContentController::class, 'homePage']);
    Route::get('/{slug}', [ContentController::class, 'show'])->where('slug', '^[a-z0-9-]+$');
});

app\\Http\\Controllers\\ContentController.php展示法:

public function show($slug)
    {
        $page = Page::where('slug', $slug)->first();
        $post = Post::where('slug', $slug)->first();

        if ($page) {
            return view('frontend.pages.show', compact('page'));
        }

        if ($post) {
            return view('frontend.posts.show', compact('post'));
        }
        
        abort(404);
      
    }

但我想使用laravel-modules程序包,如果我为ex.:product创建一个新模块,则模块\Product\routes\web.php中的默认路由为:

Route::prefix('product')->group(function() {
    Route::get('/', 'ShopController@index');
});

但是由于我的内容控制器show方法逻辑,本地主机/产品链接抛出了一个404错误...如果插件与页面/POST插件不匹配,那么如何使用默认逻辑来实现这一点?

我不想将页面和帖子分开,比如本地主机/页面/XY或本地主机/帖子/XY

推荐答案

Use 100

在路径文件中

Route::fallback([ContentController::class, 'fallback']);

一种控制器

public function fallback($slug)
{
    $page = Page::where('slug', $slug)->first();
    $post = Post::where('slug', $slug)->first();

    if ($page) {
        return view('frontend.pages.show', compact('page'));
    }

    if ($post) {
        return view('frontend.posts.show', compact('post'));
    }

    // If unmatch, then 404.
    abort(404);
}

如果在方法中使用Request个参数,则可以使用$request->query().

Php相关问答推荐

Nginx重写扩展名为.php的动态URL

在没有谷歌云客户端PHP库的情况下将图像上传到PHP中的Google存储API?

创建一个新的可变产品及其属性以用于WooCommerce中的变体

PHP测试字符串的所有POST值

如何在PHP中组合日期范围

在WooCommerce上克隆订单时使用`add_product()`添加产品元数据

按类别层次 struct 过滤 Laravel 集合

如何在laravel中获得两个时间戳之间的小时和分钟差异

启用 WooCommerce 我的帐户付款方式,允许客户添加付款方式

PHP 在数组中搜索值

当所有对象都属于同一类型时,我可以省略 PHP in_array() 中的 strict 参数吗?

Composer自动加载器重复了子类的类文件路径

服务器遇到内部错误或配置错误,无法完成您的请求

适当的时区处理 Laravel / Carbon

PHP 将数组值插入到 csv 列

Laravel 10 单元测试看不到来自 Artisan Command 的数据库更改

Laravel 从嵌套数组的第二级获取最后一项

基于其他数组创建多维数组 struct

Laravel - 按 SQL 表列对来自其他类的数组进行排序

在产品创建上添加购买备注元 - WooCommerce