Должен ли я смешивать AngularJS с фреймворком PHP?

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

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

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

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

Ответ 1

Кажется, вам может быть удобнее разрабатывать в 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 вы можете сделать get и обработать клиентскую часть ответа.

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

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