Стоит ли смешивать AngularJS с PHP-фреймворком? [закрыто]


161

AngularJS очень мощен, когда дело доходит до интерактивного HTML5 и связывания моделей. С другой стороны, PHP-фреймворки, такие как Yii, обеспечивают быструю, хорошо структурированную, безопасную и мощную разработку веб-приложений. Обе технологии предоставляют сложные средства для доступа к данным, итерации и верстки страниц.

Является ли хорошей или плохой практикой смешивать эти два подхода («настройка страницы» на стороне клиента и на стороне сервера) или это скорее противоречит смыслу интерактивных бесшовных веб-приложений AJAX на HTML5?

Я не говорю о создании JS с использованием PHP ( см. Этот вопрос ) - я говорю о создании представления, которое будет использовать AngularJS.

Я также знаю, что страница AngularJS должна (или может) связываться с сервером через службы REST для получения данных ( см. Этот вопрос ), а не извлекать их, например, из переменных PHP напрямую. Но мне кажется более удобным спроектировать «фрейм» для всего веб-приложения отдельно на PHP (например, создать главное меню или обработать авторизацию / сессии и т. Д.)


28
Отличный вопрос Я бы хотел, чтобы для этого типа вопросов было разработано местоположение StackExchange. Я привык к PHP и сам имею проект cURL для сбора большого количества данных, и верю, что инфраструктура JavaScript поверх библиотеки будет хорошо вписываться в мой проект. Моя проблема как у вас, я хочу знать, что является хорошей практикой (плюсы и минусы), а также какие части вы отбрасываете из оригинального проекта (PHP) и т. Д. Я считаю, что эти разговоры могут вызвать дебаты, но как мы можем добраться до Лучшее слияние двух языков без разговора.
Шейн

У меня есть несколько проектов AngularJS, которые я конвертирую обратно в PHP / Jquery. У меня были бесконечные проблемы с настройкой работы с широким спектром мобильных устройств и браузеров. Angular труден для SEO, и Google не является его другом. Я видел, как сайты с самым высоким рейтингом исчезли из-за перехода на угловую ...
HappyCoder

Ответы:


180

Похоже, что вам удобнее разрабатывать на PHP, вы позволяете этому не использовать весь потенциал веб-приложений.

Действительно возможно иметь PHP-рендеринг частичных и целых представлений, но я бы не рекомендовал это.

Чтобы в полной мере использовать возможности HTML и javascript для создания веб-приложения, то есть веб-страницы, которая больше похожа на приложение и в значительной степени зависит от рендеринга на стороне клиента, вам следует подумать о том, чтобы позволить клиенту нести всю ответственность за управление состоянием и представлением. Это будет легче поддерживать, и будет более удобным для пользователя.

Я бы порекомендовал вам более комфортно мыслить в более ориентированном на API подходе. Вместо того, чтобы PHP выводил предварительно отрендеренное представление и использовал angular для простых манипуляций с DOM, вы должны рассмотреть вопрос о том, чтобы PHP-бэкэнд выводил данные, которые должны обрабатываться при RESTFully, и предоставлял Angular его.

Использование PHP для визуализации представления:

/user/account

if($loggedIn)
{
    echo "<p>Logged in as ".$user."</p>";
}
else
{
    echo "Please log in.";
}

Как ту же проблему можно решить с помощью подхода, ориентированного на API, с помощью вывода JSON следующим образом:

api/auth/

{
  authorized:true,
  user: {
      username: 'Joe', 
      securityToken: 'secret'
  }
}

а в Angular вы можете получить и обработать ответную клиентскую часть.

$http.post("http://example.com/api/auth", {})
.success(function(data) {
    $scope.isLoggedIn = data.authorized;
});

Смешивание как на стороне клиента, так и на стороне сервера, как вы предлагаете, может подойти для небольших проектов, где сопровождение не важно, и вы являетесь единственным автором, но я больше склоняюсь к ориентированному на API подходу, так как это будет более правильным разделением вариантов быть проще в обслуживании.


2
Простому примера. Я сам искал не просто супер пупер базовый логин, который все делают. Большая разница, когда у вас есть PHP / HTML и переменные <td> $ name </ td> над <td> {{name}} </ td>, а затем 'app.run (function ($ rootScope) {$ rootScope.name = "Ари Лернер";}); ' Я сам пытаюсь увидеть / найти преимущество попытки или попытки заставить PHP создавать «ДИНАМИЧНЫЕ» Angular Pages. И просто не видя этого. Клиент ждет загрузки каждого отдельного элемента и заполнения / изменения шаблонов. Просто пока не заинтересован в том, чтобы PHP генерировал такую ​​стену javascript и легко просматривался
Шон Ребело

2
@ShawnRebelo Можете ли вы немного уточнить, что вы имеете в виду a wall of javascript? Я новичок в мире Angular / JS API после многих лет рендеринга PHP, поэтому эта дискуссия мне интересна.
Дан Ниссенбаум

«Вместо того, чтобы PHP выводил предварительно визуализированное представление и использовал angular для простой манипуляции с DOM ...» - позвольте мне представить вам новую старую концепцию .
Dissident Rage

Именно так и должно быть: спокойный API из бэкэнда может быть любым языком, а угловое приложение для фронтэнда может работать независимо от бэкэнда.
Амир Саванд

3
Что я не могу понять, так это то, почему я должен загружать общую страницу с заполнителями, а затем загружать какую-то часть одним или несколькими асинхронными запросами, чтобы получить то, что у меня уже было при загрузке первой страницы, например данные пользователя / аутентификации?
Tobia
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.