Как интегрировать интерфейс Reactjs с приложением php codeigniter на сервере apache? - PullRequest
0 голосов
/ 26 июня 2018

Приложение CodeIgniter было разработано намного раньше, в то время не планировалось интегрировать ReactJS. Позднее было добавлено требование для интеграции другого проекта ReactJS с этим бэкэндом и замены текущего веб-интерфейса (представления).

Приложение CodeIgniter не выполняется как RESTful API. Файлы представлений .php не могут быть заменены файлами .js приложенияactjs, поскольку сервер - Apache. Запуск сервера nodejs не будет отображать представления CodeIgniter.

Bootstrap, jquery и простой javascript могут быть включены в представление приложения CodeIgniter. Но возможно ли заменить файлы представления PHP в CodeIgniter файлами javascript?

1 Ответ

0 голосов
/ 28 июня 2018

Файлы представления PHP не нужно заменять файлами js. JavaScript можно легко добавить в файлы PHP с помощью тегов <script>. Ниже приведена демонстрация Add React за одну минуту в приложении CodeIgniter.

Чтобы интегрировать демонстрацию React в CodeIgniter, запустите с помощью простого контроллера - React.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class React extends CI_Controller
{
    public function index()
    {
        $this->load->view('react_view');
    }
}

Файл "view" взят прямо из демонстрации React, но он помещен в файл .php вместо .html.

Единственное изменение, внесенное в демонстрационный код, заключается в теге script в нижней части страницы. Моя папка assets находится на том же уровне, что и папка CodeIgniter /application. В assets есть подпапки для css, js и images.

/public_html
    /application
    /system
    /assets
        /js
        /css
        /img

Итак, я изменил src для тега, загружающего like_button.js, для работы с моим макетом файла.

Файл "view" act_view.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Add React in One Minute</title>
  </head>
  <body>

    <h2>Add React in One Minute</h2>
    <p>This page demonstrates using React with no build tooling.</p>
    <p>React is loaded as a script tag.</p>

    <p>
      This is the first comment.
      <!-- We will put our React component inside this div. -->
      <div class="like_button_container" data-commentid="1"></div>
    </p>

    <p>
      This is the second comment.
      <!-- We will put our React component inside this div. -->
      <div class="like_button_container" data-commentid="2"></div>
    </p>

    <p>
      This is the third comment.
      <!-- We will put our React component inside this div. -->
      <div class="like_button_container" data-commentid="3"></div>
    </p>

    <!-- Load React. -->
    <!-- Note: when deploying, replace "development.js" with "production.min.js". -->
    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>

    <!-- Load our React component. -->
    <script src="assets/js/like_button.js"></script>

  </body>
</html>

/ активы / JS / like_button.js

'use strict';

const e = React.createElement;

class LikeButton extends React.Component {
  constructor(props) {
    super(props);
    this.state = { liked: false };
  }

  render() {
    if (this.state.liked) {
      return 'You liked comment number ' + this.props.commentID;
    }

    return e(
      'button',
      { onClick: () => this.setState({ liked: true }) },
      'Like'
    );
  }
}

// Find all DOM containers, and render Like buttons into them.
document.querySelectorAll('.like_button_container')
  .forEach(domContainer => {
    // Read the comment ID from a data-* attribute.
    const commentID = parseInt(domContainer.dataset.commentid, 10);
    ReactDOM.render(
      e(LikeButton, { commentID: commentID }),
      domContainer
    );
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...