CakePHP with React Router



是否可以使用CakePHP的React路由器?我设置了以下路由:

<Switch>
<Route path="/editPage">
<MyComponent />
</Route>
</Switch>

当我导航到localhosteditPage在我的URL。Cake抛出异常:CakeHttpExceptionMissingControllerException

我不熟悉CakePHP中的路由。是否有办法对某些url禁用此功能?谢谢你。

如果您想使用CakePHP作为后端应用程序,那么您需要考虑您的前端应用程序如何与它通信。在大多数情况下,你的前端应用程序通过RESTful API进行通信。

你需要为这个任务准备你的CakePHP应用。

方法如下:

  • https://book.cakephp.org/4/en/development/rest.html
  • https://book.cakephp.org/4/en/development/routing.html resource-routes

路线:

// https://example.com
$builder->connect('/', ['controller' => 'Pages', 'action' => 'index']);
// https://example.com/editPages
$builder->connect('/*', ['controller' => 'Pages', 'action' => 'index']);

在PagesController中创建索引方法并使用空布局

public function index()
{
$this->viewBuilder()->setLayout('ajax');
}

templates/Pages中创建index.php作为您的反应布局。然后在webroot/中添加react应用程序的其余部分。

从react获取后端rest api,例如http://example.com/posts/edit/1.json

这取决于你如何将react应用嵌入到Cake中。您可以创建一个解码资产清单的组件。json并将资产设置为manifest内容,然后创建一个特定的控制器,将组件嵌入到视图中。

请参阅https://toggen.com.au/it-tips/embedding-a-create-react-app-project-into-a-cakephp-view/以获得关于此的伟大指南。

完成后,你只需要在你的routes.php作用域中添加一个通配符connect,将流量发送到该控制器。

$builder->connect('/*', ['controller' => 'React', 'action' => 'embed']);

如果你通过其他控制器托管其他视图,你需要添加一个单独的作用域,其中包含不属于react应用的特定路径。

最新更新