Как подружить PHP и React JS?
Я только начал изучать Node + React JS, Redux. Полный чайник.
Уважаемые гуру ткните пальцем в решении данной задачи.
Имеется на smarty php не большой сайт недвижимости. Все запросы происходят через базу MYSQL.
Подскажите (если есть такое решение, а лучше примером показать или ссылками на конкретную документацию с примерами) как правильно сделать что в Reacte можно было принимать и отправлять запросы из mysql?
пример:
подключил react
дальше я делаю выборку из базы на smarty php
private function getAgents() < $ret = array(); $DBC = DBC::getInstance(); $query = 'SELECT * FROM ' . DB_PREFIX . '_user WHERE group_id<>4 AND login<>\'_unregistered\' ORDER BY RAND() LIMIT 3'; $stmt = $DBC->query($query); if ($stmt) < while ($ar = $DBC->fetch($stmt)) < $ret[] = $ar; >> $js_obj = json_encode($res); $this->template->assign('agentslist_items', $ret); >
далее вывожу в смарти через foreach, не буду писать полный вывод, скажем так , что в шаблон средствами сматри все отдается.
но если подключить саму переменную $js_obj , то она пустая
- Вопрос задан более трёх лет назад
- 9466 просмотров
Связать react js и php. Возможно?
Начал изучать react js, node js. Такая мысль пришла. Если для, условно говоря, создания сайта, SPA нужны некоторые элементы, и потом просто клиент шлёт аякс к серверу а сервер (выступает в роли API) и отдаёт клиенту json который потом уже обрабатывается java script-ом. API ведь вполне можно реализовать на php? То есть php скрипт будет коннектится например с mysql, получать необходимые данные, формировать json. Но получается что ещё в клиенте нужно сохранять какие-то значения? Например ID который уйдёт аяксом в php и по нему произойдёт выборка. Где на клиенте (и на клиенте ли?) хранить этот ID? Как? Дело в том что JS знаю только примерно на 4 из 10. а вот с php работаю давно и много, но уже одного html, css, php и mysql становиться маловато. И вроде бы после изучения некоторой информации по реакту кажется что не так все и сложно, и мысли как-то расплылись, не могу их собрать воедино, но кажется что очень очень близко к пониманию.
Отслеживать
задан 19 мая 2019 в 9:31
2,362 4 4 золотых знака 32 32 серебряных знака 84 84 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Ваш вопрос не совсем понятен. ReactJS — это фронт-энд, PHP — бэк-энд. ReactJS можно привязать к ЛЮБОМУ типу бэк-энда даже если в качестве него будет выступать Java, Python, Ryby и т.д.
На счёт где хранить id: тут выбор большой, начиная от куки и заканчивая localStorage и sessionStorage.
Есть так же CacheStorage и IndexedDb. Как Вы поняли из названия, все они используются для разных целей.
Отслеживать
ответ дан 19 мая 2019 в 9:46
Ramazan Aliskhanov Ramazan Aliskhanov
348 1 1 серебряный знак 9 9 бронзовых знаков
Могу добавить, что когда мы говорим про SPA , мы должны в голове держать и SSR для сео и прочих поисковых плюшек, вот тут у php действительно есть просядки, если сравнивать с той-же нодой (еще держим в уме то что react.js и прочие изначально писались под ноду). т.к. у ноды фронт и бек написаны на одном языке там все легко настраивается и не геморно. а вот у php тут глобальные проблемки. есть костыль в виде V8js для SSR , но нужно уметь хорошо им пользоваться ¯|_(ツ)_/¯
19 мая 2019 в 10:13
- php
- node.js
- reactjs
How to connect ReactJS as a front-end with PHP as a back-end ?
Connecting the front end of React with the PHP backend is a classic approach to building a web application with the front end for the user interface and the back end or server side for handling databases, programming logic, and other operations.
React JS
React JS is a declarative, efficient, and flexible JavaScript library for building user interfaces. It’s ‘V’ in MVC. ReactJS is an open-source, component-based front-end library responsible only for the view layer of the application. It is maintained by Facebook.
PHP
The term PHP is an acronym for Hypertext Preprocessor. It is a server-side scripting language that is used for web development. It can be easily embedded with HTML files. HTML codes can also be written in a PHP file.
Prerequisite
- Basic knowledge of PHP
- Understanding of React JS .
- NodeJS
Project Setup
Step 1: Create a React application using the following command:
npx create-react-app folderName
Step 2: After creating your project folder(i.e. folderName), move to it by using the following command:
cd folderName
Step 3: Create a folder named PHP in root to store server files there and create a server.php file.
Project Structure
The project strucuture will look like this.
Example: Create a form in app.js with name input field and submit button linked to the php server and a result component to render output.
Связываем React с другими популярными веб-языками
React — это библиотека, написанная на JavaScript, и поэтому она агностична для любой конфигурации стека и может появляться практически в любом веб-приложении, использующем HTML и JavaScript для своего уровня представления.
Поскольку React работает как часть «V» в «MVC», мы можем создать наш собственный стек приложения исходя из наших собственных предпочтений. До сих пор в этом руководстве мы видели, что React работает с Express, фреймворке Node ES6/JavaScript. Другие популярные связки Node для React — это фреймворк Meteor и Facebook Relay.
Если вы хотите использовать превосходную компонентную JSX-систему от React, виртуальный DOM и его сверхбыстрый рендеринг в вашем существующем проекте, вы можете сделать это, реализовав одно из многих решений с открытым исходным кодом.
PHP
Поскольку PHP является серверным языком сценариев, интеграция с React может осуществляться в нескольких формах:
- Использование react-php-v8js
- Обработка запроса/ответа на стороне сервера (с маршрутизатором, например, Alto)
- Вывод JSON через json_encode()
- Обертка шаблонов, например Twig
Рендеринг на стороне сервера
Для рендеринга компонентов React на сервере есть библиотека, доступная в GitHub.
Например, с этим пакетом мы можем сделать следующее в PHP :
// the library
$react_source = file_get_contents('/path/to/build/react.js');
// all custom code concatenated
$app_source = file_get_contents('/path/to/custom/components.js');
$rjs = new ReactJS($react_source, $app_source);
$rjs->setComponent('MyComponent', array(
'any' => 1,
'props' => 2
// print rendered markup
echo '' . $rjs->getMarkup() . '';
// load JavaScript somehow - concatenated, from CDN, etc
// including react.js and custom/components.js
// init client
echo '';
// repeat setComponent(), getMarkup(), getJS() as necessary
// to render more components
Сила объединения React с любым языком сценариев на стороне сервера — это способность подавать React с данными и применять вашу бизнес-логику как на сервере, так и на стороне клиента. Обновление старого приложения в Reactive приложение никогда еще не было проще!
Использование PHP + Alto Router
Для примера приложения, посмотрите этот репозиторий на GitHub.
Настройте свой AltoRouter следующим образом:
// Router setup
require_once 'include/AltoRouter/AltoRouter.php';
$router = new AltoRouter();
$viewPath = 'views/';
// Router matches
// Manual
$router->map('GET', '/', $viewPath . 'reactjs.html', 'reactjs');
$result = $viewPath . '404.php';
$match = $router->match();
if($match)
$result = $match['target'];
// Return route match
include $result;
При настройке AltoRouter , обслуживающей страницы вашего приложения для указанных маршрутов, вы можете просто добавить свой код React внутри разметки HTML и начать использовать ваши компоненты.
"use strict";
var Comment = React.createClass(
displayName: "Comment",
render: function render()
var rawMarkup = marked(this.props.children.toString(), sanitize: true >);
return React.createElement(
className: "comment" >,
React.createElement(
className: "commentAuthor" >,
this.props.author
React.createElement("span", dangerouslySetInnerHTML: __html: rawMarkup > >)
Убедитесь, что вы включили библиотеки React, а также поместите HTML-код в тег body, который будет обрабатываться из вашего приложения PHP AltoRouter , например:
React Example
src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.0/react.js">
src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.0/JSXTransformer.js">
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js">
src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.2/marked.min.js">
id="myContent">