ฉันควรผสม AngularJS กับกรอบ PHP หรือไม่ [ปิด]


161

AngularJS นั้นทรงพลังมากเมื่อพูดถึง HTML5 เชิงโต้ตอบและการเชื่อมโยงโมเดล ในทางตรงกันข้าม PHP framework เช่น Yii ช่วยให้การพัฒนาแอปพลิเคชั่นเว็บที่รวดเร็วมีโครงสร้างปลอดภัยและมีประสิทธิภาพ เทคโนโลยีทั้งสองมีวิธีการที่ซับซ้อนสำหรับการเข้าถึงข้อมูลการวนซ้ำและการจัดหน้า

เป็นการดีหรือไม่ดีที่จะผสมผสานทั้งสองวิธีนี้ (การตั้งค่าหน้ากระดาษ "ฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์") หรือเป็นการเปรียบเทียบกับความหมายของแอปพลิเคชันเว็บ HTML5 AJAX แบบอินเทอร์แอคทีฟ

ฉันไม่ได้พูดถึงการสร้าง JS โดยใช้ PHP ( ดูคำถามนี้ ) - ฉันกำลังพูดถึงการสร้างมุมมองที่จะใช้ประโยชน์จาก AngularJS

ฉันยังรู้ว่าหน้า AngularJS ควร (หรือสามารถ) สื่อสารกับเซิร์ฟเวอร์ผ่านบริการ REST เพื่อรับข้อมูล ( ดูคำถามนี้ ) แทนที่จะดึงจากตัวอย่าง PHP ตัวแปรโดยตรง แต่สำหรับฉันแล้วมันดูเหมือนสะดวกกว่าในการออกแบบ "เฟรม" สำหรับเว็บแอปพลิเคชันทั้งหมดแยกกันใน PHP (เช่นสร้างเมนูหลักหรือจัดการการอนุญาต / เซสชัน ฯลฯ )


28
เป็นคำถามที่ดีมาก ฉันหวังว่าจะมีตำแหน่ง StackExchange ที่ออกแบบมาสำหรับคำถามประเภทนี้ ฉันคุ้นเคยกับ PHP และมีโครงการ cURL สำหรับรวบรวมข้อมูลจำนวนมากด้วยตัวเองและเชื่อว่าเฟรมเวิร์ก JavaScript บนไลบรารีจะเหมาะสมกับโครงการของฉัน ปัญหาของฉันก็เหมือนของคุณฉันต้องการรู้ว่าอะไรคือแนวปฏิบัติที่ดี (ด้านบนและด้านล่าง) พร้อมกับส่วนใดที่คุณดรอปจากโครงการดั้งเดิม (PHP) เป็นต้นฉันเชื่อว่าการสนทนาเหล่านี้สามารถเรียกร้องการอภิปรายได้ ผสานสองภาษาที่ดีที่สุดโดยไม่มีการสนทนา
เชน

ฉันมีบางโครงการของ AngularJS ที่ฉันแปลงกลับไปเป็น PHP / Jquery ฉันมีปัญหามากมายเกี่ยวกับการทำให้มุมทำงานกับอุปกรณ์มือถือและเบราว์เซอร์ที่หลากหลาย แองกูลาร์ทำ SEO ยากและ google ไม่ใช่เพื่อน ฉันเคยเห็นไซต์ที่มีอันดับสูงสุดหายไปจาก SERPS เนื่องจากเปลี่ยนไปใช้มุม ...
HappyCoder

คำตอบ:


180

ดูเหมือนว่าคุณอาจจะรู้สึกสบายใจกับการพัฒนาใน PHP คุณปล่อยให้สิ่งนี้ขัดขวางคุณจากการใช้ศักยภาพของแอพพลิเคชั่นบนเว็บอย่างเต็มที่

เป็นไปได้แน่นอนที่จะมี PHP แสดงผลบางส่วนและทั้งหมด แต่ฉันจะไม่แนะนำ

ในการใช้ความเป็นไปได้ทั้งหมดของ HTML และ javascript เพื่อสร้างเว็บแอปพลิเคชันนั่นคือหน้าเว็บที่ทำหน้าที่คล้ายกับแอปพลิเคชันมากขึ้นและอาศัยการเรนเดอร์ด้านไคลเอนต์อย่างมากคุณควรพิจารณาให้ลูกค้ารักษาความรับผิดชอบทั้งหมด วิธีนี้จะง่ายต่อการบำรุงรักษาและจะใช้งานง่ายขึ้น

ฉันอยากจะแนะนำให้คุณคิดอย่างสะดวกสบายยิ่งขึ้นด้วยวิธีการที่เป็นศูนย์กลางของ API แทนที่จะใช้ PHP เป็นมุมมองที่แสดงผลล่วงหน้าและใช้เชิงมุมสำหรับการจัดการ DOM เท่านั้นคุณควรพิจารณาให้แบ็กเอนด์ PHP แสดงผลข้อมูลที่ควรดำเนินการกับ RESTFully และให้มุมแสดงอยู่

ใช้ 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 (ฟังก์ชัน ($ rootScope) {$ rootScope.name = "Ari Lerner";}); ' ตัวฉันเองกำลังพยายามที่จะเห็น / หาส่วนกลับหัวของความพยายามหรือพยายามที่จะให้ PHP ทำหน้าเชิงมุม 'DYNAMIC' และเพียงแค่ไม่เห็นมัน ให้ไคลเอนต์รอโหลดแต่ละองค์ประกอบและเติม / เปลี่ยนแม่แบบ เพียงแค่ไม่กระตือรือร้นในความคิดของ PHP สร้างกำแพงของจาวาสคริปต์เช่นนั้นและยังสามารถดูได้ง่าย
Shawn Rebelo

2
@ShawnRebelo คุณช่วยอธิบายความหมายของคุณหน่อยได้a wall of javascriptไหม? ฉันยังใหม่กับโลกของ Angular / JS API หลังจากการเรนเดอร์ PHP มาหลายปีดังนั้นการสนทนานี้น่าสนใจสำหรับฉัน
Dan Nissenbaum

"แทนที่จะมีเอาต์พุต PHP เป็นมุมมองที่แสดงผลล่วงหน้าและใช้มุมสำหรับการจัดการ DOM เท่านั้น ... " - ให้ฉันแนะนำแนวคิดใหม่เก่าแก่คุณ
Rage แตกต่างระหว่าง

นั่นเป็นสิ่งที่ควรจะเป็น API ที่สงบจากแบ็กเอนด์สามารถเป็นภาษาใดก็ได้และแอพเชิงมุมสำหรับส่วนหน้าสามารถทำงานได้โดยไม่คำนึงถึงแบ็กเอนด์
Amir Savand

3
สิ่งที่ฉันไม่สามารถเข้าใจได้คือเหตุผลที่ฉันควรโหลดหน้าทั่วไปด้วยตัวยึดตำแหน่งแล้วโหลดบางส่วนด้วยการร้องขอ async หนึ่งรายการขึ้นไปเพื่อรับสิ่งที่ฉันมีอยู่ในการโหลดหน้าแรกเช่นข้อมูลผู้ใช้ / รับรองความถูกต้อง
เบีย
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.