【问题标题】:Host react app and laravel backend(Admin panel) in same laravel application project在同一个 laravel 应用程序项目中托管 react 应用程序和 laravel 后端(管理面板)
【发布时间】:2020-02-03 12:44:04
【问题描述】:

我想在同一个 laravel 应用项目中托管 react 应用和 laravel 应用。 前端应用是 react 和后端(管理面板)laravel。

我想将所有请求重定向到特定的前端视图,除了第一个 URL 段 == backend/:any

例如。

http://host.com/backend/(any) 继续使用 laravel 路由器

http://host.com/(any) 除了后端/ 继续反应路由器

对此有什么想法吗?

【问题讨论】:

    标签: reactjs laravel laravel-5


    【解决方案1】:

    您有两种选择,将正则表达式传递给 any 路由以忽略 API 前缀路由

    Route::get('/{any}', function () {
       return view('index.blade.php');
    })->where('any', '^(?!backend).*$');
    
    Route::fallback(function () {
        return view('index.blade.php');
    });
    

    来自the docs

    后备路线

    使用Route::fallback 方法,您可以定义一个在没有其他路由匹配传入请求时将执行的路由。通常,未处理的请求将通过应用程序的异常处理程序自动呈现“404”页面。但是,由于您可以在 routes/web.php 文件中定义 fallback 路由,因此 web 中间件组中的所有中间件都将应用于该路由。您可以根据需要随意向此路由添加额外的中间件:

    Route::fallback(function () {
        //
    });
    

    后备路由应该始终是您的应用程序注册的最后一个路由。

    【讨论】:

    • 如果他有多个管理路由怎么办?在这种情况下,如果我们输入例如“/backend/users”,它将不知道实际返回哪个视图。
    • 谢谢@CaddyDZ,后备方法是解决我问题的理想方法
    • 我今天面临这个挑战。这就是我所做的:我将我的 Lavarel 公共目录移动到一个子文件夹。然后,我将 React 构建文件夹的内容复制到服务器公共目录的根目录。
    【解决方案2】:

    在“routes/web.php”中尝试这样的事情:

    // WRITE BACK-END ROUTES AT FIRST
    Route::group([
        'prefix' => 'backend',
    ], function () {
    
        Route::get('/', 'AdminController@dashboard')->name('dashboard');
        Route::get('admin-page-1', 'AdminController@page1')->name('page1');
        Route::get('admin-page-2', 'AdminController@page2')->name('page2');
        // some other admin routes if you need
    });
    // FRONT ROUTE(S)
    Route::get('/{text}', 'FrontController@front')->name('front');
    

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 1970-01-01
      • 2014-05-17
      • 2019-01-01
      • 2016-08-16
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多