วิธีสร้างหน้า Landing Page ด้วย Laravel, Vue.js และ Twilio SendGrid
เผยแพร่แล้ว: 2021-05-27กวดวิชานี้เดิมปรากฏบนบล็อก Twilio
หน้า Landing Page มีอยู่ทั่วไปในธุรกิจสมัยใหม่
ธุรกิจต่างๆ ใช้ข้อเสนอเหล่านี้เพื่อเสนอของแจกฟรีเพื่อแลกกับผู้ที่เข้าร่วมรายชื่อผู้รับจดหมาย เพื่อขายผลิตภัณฑ์หรือบริการ และเป็นประวัติย่อที่น่ายกย่อง
หน้า Landing Page เป็นโซลูชันที่ยอดเยี่ยมสำหรับความต้องการทางธุรกิจประเภทนี้ เนื่องจากคุณสามารถสร้างและปรับใช้ได้อย่างรวดเร็ว การรู้วิธีสร้างสิ่งเหล่านี้อาจเป็นทักษะที่ยอดเยี่ยมสำหรับนักพัฒนา ไม่ว่าจะเป็นการสร้างหน้า Landing Page สำหรับผู้อื่นหรือสำหรับโครงการส่วนตัว
ในบทช่วยสอนนี้ ฉันจะแสดงวิธีสร้างหน้า Landing Page โดยใช้ Laravel 8, Vue.js และ Twilio SendGrid ร่วมกัน เป็นบทช่วยสอนที่ยาวพอสมควร และในตอนท้าย ฉันมั่นใจว่าคุณจะได้เรียนรู้อะไรมากมาย
ข้อกำหนดเบื้องต้น
เพื่อให้บทช่วยสอนสมบูรณ์ คุณจะต้องมี 4 สิ่งต่อไปนี้ในสภาพแวดล้อมการพัฒนาในพื้นที่ของคุณ:
- มีประสบการณ์กับ Laravel มาก่อน (ควรเป็นเวอร์ชัน 8.0) และ Vue.js (เหมาะสำหรับซีรีส์ 3.x)
- บัญชี Twilio SendGrid ฟรีหรือจ่ายเงิน
- นักแต่งเพลง ติดตั้งทั่วโลก
- cURL
- Node.js และ npm
- PHP 7.4 (พร้อม ติดตั้งและเปิดใช้งานส่วนขยาย cURL , mbstring , intl และ OpenSSL )
- ตัวติดตั้ง Laravel
ภาพรวมการสมัคร
ก่อนที่เราจะลงลึกและเริ่มสร้างแอปพลิเคชัน ฉันต้องการให้ภาพรวมคร่าวๆ ของขั้นตอนผู้ใช้ของแอปพลิเคชัน ซึ่งคุณสามารถดูได้จากภาพด้านล่าง
หน้า Landing Page จะอนุญาตให้ผู้ใช้ลงทะเบียนเพื่อรับการแจ้งเตือนเกี่ยวกับข้อเสนอที่กำลังจะมีขึ้นจากร้านค้าออนไลน์สมมติที่ฉันสร้างขึ้น—The Little PHP Shop—ใน บทช่วย สอน Twilio SendGrid ล่าสุด
แอปพลิเคชันจะมีสองเส้นทาง / และ /signup ทั้งสองจัดการโดยตัว ควบคุม /
/signup
LandingPageController
เมื่อผู้ใช้ขอเส้นทางเริ่มต้น ( /
) พวกเขาจะเห็นแบบฟอร์มขอให้ระบุที่อยู่อีเมลเพื่อสมัครรับการแจ้งเตือนจาก The Little PHP Shop
หลังจากส่งแล้ว ฝั่งไคลเอ็นต์และเซิร์ฟเวอร์จะตรวจสอบความถูกต้องของแบบฟอร์ม หากการตรวจสอบฝั่งไคลเอ็นต์สำเร็จ เซิร์ฟเวอร์จะได้รับที่อยู่อีเมลในรูปแบบของ วัตถุ JSON หากการตรวจสอบฝั่งเซิร์ฟเวอร์ผ่าน ผู้ใช้จะได้รับการลงทะเบียนและจะได้รับอีเมลยืนยันการลงทะเบียน
ณ จุดนี้ ลูกค้าจะได้รับการตอบกลับ JSON เพื่อยืนยันความสำเร็จในการสมัคร เมื่อลูกค้าได้รับสิ่งนี้ มันจะซ่อนแบบฟอร์มและแสดงข้อความยืนยันว่าทุกอย่างเป็นไปด้วยดี
หากการตรวจสอบฝั่งเซิร์ฟเวอร์ล้มเหลวหรือหากผู้ใช้สมัครใช้งานไม่สำเร็จ ผู้ใช้จะได้รับการตอบสนอง JSON ด้วย การตอบสนอง JSON นี้จะระบุว่าทั้งกระบวนการล้มเหลวและเพราะเหตุใด
สร้างแอปพลิเคชันแบ็คเอนด์
Bootstrap แอปพลิเคชัน Laravel
สิ่งแรกที่เราต้องทำคือการบูตแอปพลิเคชัน Laravel ใหม่ โดยเรียกใช้คำสั่งด้านล่าง อย่าลังเลที่จะใช้ วิธีอื่นใดในการบูตแอปพลิเคชัน Laravel หากคุณต้องการ
แอปพลิเคชันที่บูตสแตรปจะถูกสร้างขึ้นในไดเร็กทอรีใหม่ที่ชื่อ หน้า Landing Page เปลี่ยนเป็นไดเร็กทอรีและเริ่มแอปพลิเคชันเพื่อตรวจสอบว่าทุกอย่างทำงานโดยใช้คำสั่งด้านล่าง แอพจะพร้อมใช้งานบน localhost บนพอร์ต 8000
หากแอปพลิเคชันทำงาน คุณจะเห็นหน้าที่คล้ายกับภาพหน้าจอด้านล่าง หยุดการทำงานของแอปพลิเคชันโดยกด CTRL+C
ติดตั้งแพ็คเกจที่จำเป็น
เมื่อแอพพลิเคชั่นบูทสแตรป ตอนนี้เราต้องติดตั้งแพ็คเกจภายนอก 2 แพ็คเกจ:
- s-ichikawa/laravel-sendgrid-driver : เพื่อส่งอีเมลผ่าน Twilio SendGrid เนื่องจาก Laravel ไม่ได้ให้บริการ ขนส่งอีเมล ดั้งเดิม สำหรับ Twilio SendGrid ฉันเลือกไลบรารี่นี้เนื่องจากเป็นแพ็คเกจเดียวที่ออกแบบมาสำหรับ Laravel โดยเฉพาะ
- sendgrid/sendgrid : เพื่อเพิ่มผู้ติดต่อในรายการผู้ติดต่อของเราใน Twilio SendGrid
ในการติดตั้ง ให้รันคำสั่งด้านล่างในไดเร็กทอรีรากของโครงการ
สร้างคีย์ API
ถัดไป คุณต้องจัดหาแอปพลิเคชันด้วยคีย์ Twilio SendGrid API ของคุณ ในการทำเช่นนั้น หลังจากลงชื่อเข้าใช้ Twilio SendGrid แล้ว ให้ไปที่ “การตั้งค่า -> คีย์ API เมื่อมี:
- คลิก " สร้างคีย์ API " เพื่อสร้างคีย์ API
- ตั้งชื่อคีย์ API ใหม่
- ยอมรับการอนุญาตคีย์ API เริ่มต้นของ “ การเข้าถึงแบบ เต็ม ”
- คลิก “ สร้างและ ดู ”
หลังจากที่คุณสร้างคีย์ API แล้ว ให้คัดลอกเพื่อนำไปใช้ในขั้นตอนต่อไป
จากนั้น เปิด ไฟล์ . env ในไดเร็กทอรีรากของโปรเจ็กต์ และเพิ่มคู่คีย์/ค่าด้านล่างที่ส่วนท้ายของไฟล์ แทนที่ YOUR-KEY-HERE
ด้วยคีย์ API ที่คุณสร้างและคัดลอก นอกจากนี้ อัปเดต 2 คีย์ที่มีอยู่ในไฟล์: MAIL_MAILER
เป็น sendgrid
และ MAIL_FROM_ADDRESS
เป็นที่อยู่อีเมลที่คุณเลือก
หมายเหตุ: สร้างจดหมาย
ตอนนี้ เราต้องสร้าง คลาส เมลที่จะเก็บหัวเรื่องของอีเมล ตั้งค่ามุมมองเพื่อแสดงเนื้อหาของอีเมล และระบุการขนส่งเมลที่จะใช้ ในการทำเช่นนั้น ให้รันคำสั่งด้านล่างในไดเร็กทอรีรากของโครงการ
ไฟล์ใหม่ชื่อ Subscribed.php จะถูกสร้างขึ้นใน app /Mail คัดลอกและวางโค้ดด้านล่างแทนโค้ดที่มีอยู่ของไฟล์
การดำเนินการส่วนใหญ่ใน Mailable build
ขึ้นในวิธีการบิลด์ ซึ่งเรียกใช้ชุดวิธีอื่นเพื่อตั้งค่า:
- เทมเพลตที่จะแสดงผลเพื่อสร้างเนื้อหาของอีเมล (
view
) - หัวเรื่องของอีเมล (
subject
)
- เทมเพลตที่จะแสดงผลเพื่อสร้างเนื้อหาของอีเมล (
วิธีการ build
เสร็จสิ้นโดยการเรียก sendgrid
ซึ่งทำให้มั่นใจได้ว่าการขนส่ง Twilio SendGrid จะส่งอีเมล
สร้างตัวควบคุมหน้า Landing Page
ตอนนี้ได้เวลาสร้างคอนโทรลเลอร์เพื่อจัดการคำขอไปยัง 2 เส้นทางของแอปพลิเคชัน โดยเรียกใช้คำสั่งด้านล่าง เมื่อคำสั่งเสร็จสิ้น ไฟล์ใหม่ชื่อ LandingPageController.php จะถูกสร้างขึ้นใน app /Http/Controllers
เมื่อสร้างไฟล์แล้ว ให้เปิด app/Http/Controllers/LandingPageController.php และเพิ่ม 2 วิธีเข้าไป ขั้นแรก วิธี show
จากตัวอย่างด้านล่าง ตามด้วยวิธีการ สมัคร ฉันได้เชื่อมโยงกับวิธีการ signup
ใช้งาน เนื่องจากยาวเกินไปที่จะรวมไว้ในบทความโดยตรง
หลังจากนั้น เพิ่มคำสั่งการใช้งานต่อไปนี้สำหรับวิธีการ signup
ใช้งาน
ฉันจะข้ามวิธีการ show
เนื่องจากควรเป็นการอธิบายตนเอง และดำดิ่งสู่วิธีการ signup
ใช้ เมธอดนี้เริ่มต้นโดยใช้ ส่วนหน้าเครื่องมือตรวจสอบความถูกต้อง ของ Laravel เพื่อตรวจสอบข้อมูลที่ส่งในคำขอ ดึงข้อมูลโดยการเรียก $request->all()
กับชุดกฎการตรวจสอบที่มีผลลัพธ์เก็บไว้ใน $validator
หากต้องการผ่าน การตรวจสอบความถูกต้อง เนื้อหาคำขอต้องมีองค์ประกอบชื่อ email
ซึ่งมีค่าเป็นที่อยู่อีเมลที่ถูกต้อง นอกจากนี้ ฉันได้เพิ่ม กฎการตรวจสอบ คำขอความคิดเห็น (RFC) และ ระบบชื่อโดเมน (DNS) เฉพาะอีเมลเนื่องจาก:
- การตรวจสอบความถูกต้องของ RFC ช่วยให้มั่นใจได้ว่าอีเมลนั้นถูกต้องตามอีเมล RFC อย่างไรก็ตาม แม้ว่าจะผ่านการตรวจสอบความถูกต้องนั้น อีเมลอาจไม่สามารถกำหนดเส้นทางได้ในระดับสากล เช่น
matthew
หรือmatthew@lan
- การตรวจสอบความถูกต้อง DNS ช่วยให้แน่ใจว่าที่อยู่อีเมลไม่มี ชื่อ DNS ระดับบนสุดที่สงวนไว้ หรือ mDNS และเนมสเปซ DNS ส่วนตัว เช่น
test
,local
,lan
,intranet
และinternal
- การตรวจสอบความถูกต้องของ RFC ช่วยให้มั่นใจได้ว่าอีเมลนั้นถูกต้องตามอีเมล RFC อย่างไรก็ตาม แม้ว่าจะผ่านการตรวจสอบความถูกต้องนั้น อีเมลอาจไม่สามารถกำหนดเส้นทางได้ในระดับสากล เช่น
หมายเหตุ: หากผลลัพธ์ของการเรียกเมธอด fails
คืนค่า false
อ็อบเจ็กต์ JSON จะส่งคืนที่มีรายการข้อผิดพลาดในการตรวจสอบความถูกต้องของฟอร์ม สิ่งเหล่านี้สามารถเรียกคืนได้โดยการเรียกวิธี errors
ของ $validator
นอกจากนี้ รหัสสถานะของการตอบกลับถูกตั้งค่าเป็น 422 เพื่อแสดงว่าคำขอไม่สามารถดำเนินการได้
อย่างไรก็ตาม หากการตรวจสอบสำเร็จ ก็ถึงเวลาเพิ่มที่อยู่อีเมลลงในรายชื่อผู้ติดต่อของเรา ในการทำเช่นนั้น คุณต้องเริ่มต้นวัตถุ SendGrid
ใหม่ ซึ่งต้องใช้คีย์ Twilio SendGrid API ที่คุณดึงมาจากตัวแปรสภาพแวดล้อม 'SENDGRID_API_KEY'
หลังจากนั้น คำขอ PUT จะถูกส่งไปยัง ปลายทาง Twilio SendGrid API /marketing/contacts/
สำหรับคำขอนั้น อาร์เรย์ของผู้ติดต่อจะส่งผ่าน แม้ว่าจะมีผู้ติดต่อเพียงรายเดียวที่เราระบุที่อยู่อีเมลของผู้ติดต่อใหม่
หากรหัสสถานะของการตอบกลับไม่ใช่ 202 แสดงว่าเรารู้ว่ามีบางอย่างผิดพลาด หากสิ่งนี้เกิดขึ้น การตอบสนอง JSON จะส่งคืนไปยังไคลเอนต์ที่มีคุณสมบัติ 3 ประการ:
-
status
: ตั้งfalse
-
message
: ตั้งค่าเป็น “การสมัครล้มเหลว” -
reason
: เริ่มต้นด้วยข้อผิดพลาดที่ส่งคืนจากการเรียก Twilio SendGrid API
-
หากเพิ่มผู้ใช้ลงในรายชื่อผู้ติดต่อของเราเรียบร้อยแล้ว ก็ถึงเวลาส่งอีเมลยืนยันถึงพวกเขา ในการทำเช่นนั้น รหัสจะใช้สองวิธีบน หน้าจดหมาย ของ Laravel to
ตั้งค่าผู้รับและ send
เพื่อส่งอีเมล
เรียกผู้รับจากที่อยู่อีเมลที่ส่งในเนื้อหาคำขอ เรียกข้อมูลได้อย่างง่ายดายโดยเรียกวิธีการ input
ของ $request
คุณสมบัติที่เหลือของอีเมลอยู่ใน Subscribed ซึ่ง เป็นออบเจ็กต์ที่ส่ง ได้ที่ เราสร้างไว้ก่อนหน้านี้ และส่งผ่านไปยังวิธีการ send
ของส่วนหน้าของอีเมล
การพยายามส่งอีเมลถูกบล็อกในบล็อก try/catch ในกรณีที่มีปัญหาในการส่งอีเมล เช่น พยายามส่งจากที่อยู่อีเมลที่ไม่อยู่ในรายการ " ยืนยัน แล้ว" ใน "การ ยืนยันผู้ส่งรายเดียว " โต๊ะ.
หากมีข้อผิดพลาด การตอบสนอง JSON จะส่งคืนไปยังไคลเอ็นต์ที่มีคุณสมบัติ 3 อย่าง ซึ่งคล้ายกับก่อนหน้านี้:
-
status
: ตั้งfalse
-
message
: ตั้งค่าเป็น “การลงทะเบียนล้มเหลว” -
reason
: เริ่มต้นด้วยข้อความของข้อยกเว้น
-
เมื่อถึงจุดนี้ทุกอย่างก็สำเร็จ ถึงเวลาต้องแจ้งให้ผู้ใช้ทราบ รหัสทำเช่นนั้นโดยส่งคืนการตอบสนอง JSON อีกครั้ง แต่คราวนี้มีเพียง 2 คุณสมบัติเท่านั้น: ตั้งค่า status
true
และตั้งค่า message
เป็น “ registration is completed ”
ตัวเล็กแต่ ได้ผล !
หมายเหตุ: สร้างเทมเพลตที่จำเป็น
ถึงเวลาสร้างเทมเพลตที่แอปของเราจะใช้ ภายใต้ ทรัพยากร/มุมมอง เราจะสร้าง 2 ไดเร็กทอรี ( อีเมล และ เล ย์เอาต์ ) และ 3 ไฟล์ ( landing.blade.php , email/subscribed.blade.php และ layouts/app.blade.php )
นี่คือการแสดงภาพอย่างรวดเร็วของโครงสร้างไฟล์และไดเร็กทอรีที่เราจะสร้าง
ฉันเลือกโครงสร้างนี้เป็นหลักเพราะฉันชอบ รูปแบบมุมมองสองขั้น ตอน หากคุณไม่คุ้นเคย จะแบ่งมุมมองออกเป็น 2 ส่วน มีส่วนหนึ่งสำหรับเนื้อหาใดๆ ที่สอดคล้องในคำขอทั้งหมด ( layouts/app.blade.php ) และส่วนหนึ่งสำหรับเนื้อหาเฉพาะคำขอ ( landing.blade.php )
แอปพลิเคชันขนาดเล็กอาจดูเหมือนใช้ทักษะมากเกินไป แต่ฉันพบว่าวิธีนี้ช่วยให้สร้างเทมเพลตที่ดูแลรักษาได้ง่ายขึ้น
รันคำสั่งด้านล่างเพื่อสร้างไฟล์และโครงสร้างไดเร็กทอรี
หมายเหตุ: อัปเดตทรัพยากร/มุมมอง/เลย์เอาต์/app.blade.php
เปิด Resources/views/layouts/app.blade.php แล้ววางโค้ดด้านล่างลงไป ส่วนใหญ่เป็น รหัสเทมเพลต Laravel มาตรฐาน ซึ่งคุณสามารถหาได้ใน ทรัพยากร /views/welcome.blade.php
อย่างไรก็ตาม 2 แท็กสุดท้ายในส่วนหัวนั้นมีค่าควรแก่การสังเกต ที่นี่ เราเชื่อมโยงสไตล์ชีต CSS ที่เราจะสร้างในภายหลังในบทช่วยสอน และจัดเก็บ โทเค็น CSRF ซึ่ง Laravel จะสร้างให้เรา (เพิ่มเติมเกี่ยวกับเรื่องนั้นในไม่ช้า) เป็นเมตาแท็ก
เราจะไม่พูดถึง ทรัพยากร/views/landing.blade.php และ ทรัพยากร /views/email/subscribed.blade.php ในตอนนี้ เนื่องจากเราจะกล่าวถึงในภายหลังในบทช่วยสอน
อัพเดทตารางเส้นทาง
เราต้องทำการเปลี่ยนแปลงเพียง 2 รายการในตารางเส้นทาง: เพื่อเปลี่ยนตัวจัดการเส้นทางเริ่มต้นและเพิ่มเส้นทางใหม่เพื่อจัดการการลงชื่อสมัครใช้ ในการทำเช่นนั้น ให้แทนที่เส้นทางที่มีอยู่ใน routes/web.php ด้วยรหัสด้านล่าง
เพิ่มคำสั่งการใช้งานสำหรับ LandingPageController ด้วย:
อัปเดตการกำหนดค่าของ Laravel
ด้วยเส้นทางที่กำหนดไว้ ตอนนี้เราจำเป็นต้องอัปเดตไฟล์การกำหนดค่าหลักของ Laravel 3 ไฟล์: config/cors.php , config/mail.php และ config / services.php
อัปเดต config/cors.php
ไฟล์แรกที่เราต้องอัปเดตคือ config /cors.php ทั้งนี้เพื่อให้ คำขอ XHR ที่เราทำในส่วนหน้า Vue.js สามารถส่งคำขอไปยังแอป Laravel แบ็คเอนด์ได้สำเร็จ
หากต้องการเปิดใช้งาน ให้อัปเดตอาร์เรย์ขององค์ประกอบ paths
ธในอาร์เรย์ที่ส่งคืนใน config/cors.php เพื่อให้ตรงกับโค้ดตัวอย่างด้านล่าง
อัปเดต config/mail.php
ต่อไป เราต้องอัปเดต config/mail.php เพื่อลงทะเบียน sendgrid
เป็นการส่งจดหมายที่ถูกต้อง ในการดำเนินการดังกล่าว ให้เพิ่มการกำหนดค่าด้านล่างในอาร์เรย์ขององค์ประกอบ mailers
ที่ส่วนท้ายของรายการการขนส่งที่มีอยู่
อัปเดต config/services.php
การเปลี่ยนแปลงขั้นสุดท้ายที่เราต้องทำคือ config/services.php เพื่อลงทะเบียน sendgrid
เป็นบริการกับคอนเทนเนอร์ Dependency Injection (DI) ของ Laravel โดยเพิ่มการกำหนดค่าด้านล่างที่ส่วนท้ายของอาร์เรย์ที่ส่งคืนในไฟล์
สร้างแอปพลิเคชัน Vue.js
ตอนนี้เราได้สร้างส่วนหลังของแอปพลิเคชันแล้ว ก็ถึงเวลาสร้างแอปพลิเคชัน Vue.js ส่วนหน้า ก่อนที่เราจะสามารถทำได้ เราต้องติดตั้งการพึ่งพาหลายรายการ
ดีใจที่มีไม่มากนัก แค่ Vue.js และ Laravel Mix พร้อมรองรับ Tailwind CSS , PostCSS และ Lodash เพื่อทำให้การสร้างส่วนหน้าง่ายขึ้น
ในการติดตั้ง ให้รันคำสั่งด้านล่างในไดเร็กทอรีรากของโครงการ
อัปเดตทรัพยากร/มุมมอง/landing.blade.php
ฉันไม่ได้รวมเนื้อหาทั้งหมดของ ทรัพยากร/views/email/landing.blade.php เนื่องจากเนื้อหาค่อนข้างยาวและจะใช้พื้นที่มากเกินไปในบทความนี้ คุณสามารถค้นหาได้ ในที่เก็บ GitHub สำหรับโครงการนี้ คัดลอกและวางเนื้อหาลงในเทมเพลต
ฉันจะดำเนินการในส่วนที่เกี่ยวข้องมากที่สุดของไฟล์ อันดับแรก เราจะนึกภาพสิ่งที่เกิดขึ้นในไฟล์เพื่อให้เห็นคุณค่าของสิ่งที่เกิดขึ้นได้ง่ายขึ้น
เรากำลังสร้างแอปพลิเคชัน Vue.js ขนาดเล็กที่เรียกว่า app
ประกอบด้วย 2 ส่วน:
- แบบฟอร์มแลนดิ้งเพจที่ผู้ใช้เห็นเมื่อเข้าสู่เพจครั้งแรก
- การยืนยันหลังการส่งที่ปรากฏแทนที่แบบฟอร์มหลังจากส่งแบบฟอร์มสำเร็จแล้ว
มาเริ่มกันที่แบบฟอร์มหน้า Landing Page ประกอบด้วย 2 ส่วนคือ
- ส่วนหัวและคำอธิบายการตลาดเพื่อโน้มน้าวให้ผู้อ่านระบุ ที่อยู่อีเมล
- แบบฟอร์มที่ผู้ใช้สามารถกรอกและส่ง ซึ่งสามารถแสดงข้อผิดพลาดเมื่อส่งแบบฟอร์มไม่ผ่านการตรวจสอบหรือคำขอฝั่งเซิร์ฟเวอร์ล้มเหลว
ส่วนด้านล่างโดยตรงเป็นส่วนที่หนึ่ง ไม่มีอะไรมาก ยกเว้น V-show directive ซึ่งจะแสดงองค์ประกอบตามเงื่อนไขหาก submitted
เป็น true
ส่วนถัดไปใช้คอมโพเนนต์ Vue.js แบบกำหนดเอง error-item
เพื่อลดจำนวนโค้ดที่จำเป็นในเทมเพลตและเพื่อให้การแสดงข้อผิดพลาดสามารถบำรุงรักษาได้มากขึ้น เราจะพูดถึงองค์ประกอบนี้ในไม่ช้า
ส่วนนี้ใช้ คำสั่ง V-if เพื่อแสดงองค์ประกอบตามเงื่อนไขว่ามีข้อผิดพลาดหรือไม่ มันใช้แอตทริบิวต์ @submit.prevent
ของ Vue.js เพื่อส่งผ่านการควบคุมของกระบวนการส่งแบบฟอร์มปกติไปยังเมธอด processForm
ใช้ คำสั่ง Blade CSRF ของ Laravel เพื่อแสดงโทเค็น CSRF ในฟิลด์แบบฟอร์มที่ซ่อนอยู่
อีกสิ่งหนึ่งที่น่าสังเกตคือ คำสั่ง V-model ในฟิลด์อินพุตอีเมล v-model="form.email"
ซึ่งจะสร้างการเชื่อมโยง 2 ทางระหว่างองค์ประกอบของแบบฟอร์มและคุณสมบัติ form.email
ในโค้ด JavaScript เราจะกลับมาที่นี่ในไม่ช้า
หมายเหตุ: ส่วนสุดท้ายมีข้อความยืนยันที่จะแสดงเมื่อส่งแบบฟอร์มสำเร็จ เราสามารถทำให้มันง่ายโดยเพียงแค่ระบุข้อความส่วนหัวและเนื้อหา
สร้างโค้ด JavaScript
ต่อไป เราจะทำงานผ่าน JavaScript ที่จะขับเคลื่อนส่วนหน้า มีความยาวเล็กน้อย ดังนั้นให้คัดลอกโค้ด จากที่เก็บ GitHub และวางแทนโค้ดที่มีอยู่ใน resources /js/app.js แล้วเราจะผ่านมันไปได้
รหัสเริ่มต้นด้วยการกำหนด sendGridApp
ซึ่งเป็นพื้นฐานของแอปพลิเคชัน Vue.js ของเราและมีคุณสมบัติข้อมูล 3 อย่าง:
-
errors
: นี่คือรายการข้อผิดพลาดในการตรวจสอบแบบฟอร์ม -
form.email
: ใช้สำหรับเก็บอีเมลที่ผู้ใช้ระบุ -
submitted
: กำหนดว่าส่งแบบฟอร์มสำเร็จหรือไม่ หากเป็นfalse
แบบฟอร์มจะแสดงขึ้น หากเป็นtrue
ข้อความยืนยันจะแสดงแทนแบบฟอร์ม
-
ต่อไป เราจะกำหนดเมธอดของ sendGridApp
เริ่มต้นด้วย processForm
ซึ่งถูกเรียกจากการส่งแบบฟอร์ม เราสามารถตรวจสอบว่าอีเมลมีการตั้งค่าไว้หรือไม่ หากไม่มี มันจะตั้งค่าข้อความแสดงข้อผิดพลาดและส่งกลับค่าเท็จเพื่อให้การส่งแบบฟอร์มหยุดลง หากมี จะเรียก subscribeUser
เพื่อสมัครสมาชิกผู้ใช้ในรายการ
subscribeUser
ส่งคำขอ POST ไปยัง /signup
โดยมีเนื้อหา JSON ซึ่งมีสำเนาของแบบฟอร์มที่ส่งที่เข้ารหัส JSON
ส่วนหัวของคำขอมีความสำคัญที่ควรทราบ นี่เป็นเพราะพวกเขารับรองว่า Laravel ตีความคำขอเป็นคำขอ XHR ไม่ใช่การส่งแบบฟอร์มปกติ ( Content-Type
และ Accept
) และคำขอนั้นถูกต้องเพราะมีโทเค็น CSRF ( X-CSRF-TOKEN
)
หากเรากำลังสร้างแอปพลิเคชันฝั่งเซิร์ฟเวอร์โดยใช้เทมเพลต Blade เท่านั้น เราจะต้องรวม คำสั่ง CSRF ของ Blade เท่านั้น และ Blade จะทำส่วนที่เหลือเอง อย่างไรก็ตาม JavaScript ไม่ได้ค่อนข้างง่ายนัก
รหัสใช้วิธี then
ของ Promise เพื่อดึง JSON ในการตอบกลับ (หากคำขอสำเร็จ) หรือแสดงข้อผิดพลาด (หากไม่สำเร็จ) หากคำขอสำเร็จ จะ then
เมธอดถัดไป
ในที่นี้ มันกำหนดให้ submitted
เป็นจริง ซึ่งทำหลายสิ่ง:
- ซ่อนแบบฟอร์ม
- แสดงข้อความยืนยัน
- ล้างที่อยู่อีเมลที่ป้อนในแบบฟอร์ม
สุดท้าย หากมีสิ่งผิดปกติเกิดขึ้น จะตรวจพบข้อผิดพลาดและบันทึกลงในคอนโซล
ในที่สุด แอป Vue.js ใหม่จะถูกสร้างขึ้น ซึ่งมีชื่อว่า app
โดยมี const ที่เราเพิ่งกำหนด โค้ดการสร้างแอปกำหนดส่วนประกอบขนาดเล็กสำหรับการแสดงข้อผิดพลาดของฟอร์มและติดตั้งแอป
สร้างสไตล์ชีต
ถัดไป ใน ทรัพยากร/css/app.css ให้เพิ่มโค้ดด้านล่าง ประกอบด้วยสไตล์ base
components
และ utilities
ของ Tailwind และสร้าง สไตล์พื้นฐานเพิ่มเติมหลายแบบ สำหรับองค์ประกอบบางอย่างที่เหมือนกันในเทมเพลตมุมมอง
อัปเดตทรัพยากร/มุมมอง/อีเมล/subscribed.blade.php
ฉันไม่ได้รวมเนื้อหาทั้งหมดของ ทรัพยากร/views/email/subscribed.blade.php เนื่องจากเนื้อหาค่อนข้างยาวและจะใช้พื้นที่มากเกินไปในบทความนี้ คุณสามารถค้นหาได้ใน ที่เก็บ GitHub สำหรับโครงการนี้ คัดลอกและวางเนื้อหาลงในเทมเพลต
ตอนนี้ เราจะพูดถึงส่วนที่เกี่ยวข้องมากที่สุดของไฟล์
เทมเพลตจะขยาย ทรัพยากร/views/layouts/app.blade.php โดยการตั้งค่าเนื้อหาสำหรับส่วน content
เมื่อแสดงผล เนื้อหานั้นค่อนข้างง่าย เพียงแค่ขอบคุณผู้ใช้ที่สมัครรับข้อมูลและสิ้นสุดโดยให้ลิงก์สำหรับยกเลิกการสมัครแก่ผู้ใช้
สร้างแอปพลิเคชันส่วนหน้า
ณ จุดนี้ เราเกือบจะพร้อมที่จะทดสอบแอปแล้ว อย่างไรก็ตาม เราต้องสร้างส่วนหน้าและไฟล์สนับสนุนก่อนจึงจะทำได้ เป็นเรื่องที่น่า ยินดี Laravel Mix ทำให้เรื่องนี้เป็นเรื่องเล็กน้อย ในการเริ่มต้น เราต้องอัปเดตไฟล์การกำหนดค่าหนึ่งไฟล์ และสร้างไฟล์การกำหนดค่าไฟล์ที่สอง
อัปเดต webpack.mix.js
เนื่องจาก Laravel Mix มาพร้อมกับ Laravel ไฟล์การกำหนดค่า webpack.mix.js จึงพร้อมใช้งานและมีการกำหนดค่าพื้นฐาน
อย่างไรก็ตาม เราต้องเพิ่ม 2 รายการเข้าไป การเพิ่มครั้งแรกสนับสนุน Laravel Mix สำหรับคอมโพเนนต์ไฟล์เดียวของ Vue.js การเพิ่มครั้งที่ สอง รองรับ Tailwind CSS เพิ่มการเปลี่ยนแปลงที่ไฮไลต์ด้านล่าง ใน webpack.mix.js
สร้าง tailwind.config.js
เนื่องจากเราใช้ Tailwind CSS เพื่อจัดรูปแบบส่วนหน้า และเนื่องจากเราเพิ่งเพิ่มการรองรับให้กับไฟล์การกำหนดค่าของ Laravel Mix เราจึงต้องจัดหา ไฟล์การกำหนดค่า tailwind.config.js เพื่อสร้างอย่างถูกต้อง
สร้างไฟล์ใหม่ชื่อ tailwind.config.js ในไดเร็กทอรีรากของโปรเจ็กต์ จากนั้นคัดลอกและวางโค้ดด้านล่างลงในไฟล์
สิ่งนี้แนะนำ ให้ PostCSS แยกวิเคราะห์ไฟล์ PHP, Blade, JavaScript และ Vue.js ทั้งหมดในไดเร็กทอรีด้านบน และสร้างรายการสไตล์ Tailwind CSS ทั้งหมดที่ค้นพบในนั้น เมื่อใช้รายการดังกล่าว จะตัดสไตล์ที่ไม่ได้ใช้ออกจากสไตล์ชีต CSS ของ Tailwind เริ่มต้น โดยสร้างสไตล์ชีตขนาดประมาณ 20.5 KB
ซึ่งมีประโยชน์เนื่องจากไฟล์เริ่มต้นที่ไม่มีการบีบอัด มี ขนาด 3566.2KB มันใหญ่เกินไปสำหรับเว็บไซต์ที่ต้องการประสิทธิภาพ
เมื่อไฟล์อยู่ในตำแหน่งและกำหนดค่าแล้ว ในเทอร์มินัลในไดเรกทอรีรากของโปรเจ็กต์ ให้รันคำสั่งด้านล่าง
คำสั่งนี้รัน Laravel Mix โดยบอกให้:
- สร้าง public/js/app.js จาก แหล่งข้อมูล/js/app.js
- สร้าง public/css/app.css จาก แหล่งข้อมูล/css/app.css
ใช้เวลาเพียงไม่กี่วินาทีในการดำเนินการให้เสร็จสิ้นและแสดงผลต่อไปนี้ไปยังเครื่องเทอร์มินัล
ทดสอบการใช้งาน
เมื่อโค้ดอยู่ในตำแหน่งและต่อสายทั้งหมดแล้ว ก็ถึงเวลาทดสอบว่ามันทำงานอย่างถูกต้อง ในการทำเช่นนั้น ให้เริ่มแอปพลิเคชันโดยใช้คำสั่งด้านล่าง
จากนั้นเปิด http://localhost:8000 ในเบราว์เซอร์ที่คุณเลือก ก่อนกรอกแบบฟอร์ม ให้เปิด เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ และเปลี่ยนเป็น แท็บ คอนโซล เมื่อพร้อมทุกอย่างแล้ว ให้กรอกแบบฟอร์มด้วยที่อยู่อีเมลที่ถูกต้อง
คุณควรเห็นแบบฟอร์มที่ซ่อนอยู่และแทนที่ด้วยข้อความยืนยัน ตรวจสอบกล่องจดหมายของคุณสำหรับอีเมลยืนยัน จากนั้น ดู รายชื่อผู้ติดต่อทั้งหมด ของคุณ เพื่อยืนยันว่าผู้ใช้สมัครสำเร็จแล้ว หากสำเร็จ คุณจะเห็นรายการดังกล่าว คล้ายกับในภาพหน้าจอด้านล่าง
ลองอีกครั้งโดยคลิกลิงก์ "เริ่มต้นใหม่" และส่งแบบฟอร์มโดยไม่ต้องป้อนที่อยู่อีเมลหรือหลังจากป้อนที่อยู่อีเมลที่ไม่ถูกต้อง คุณควรเห็นข้อความแสดงข้อผิดพลาดที่เกี่ยวข้องปรากฏขึ้น
นั่นคือวิธีสร้างหน้า Landing Page โดยใช้ Laravel 8, Vue.js และ Twilio SendGrid
เราได้ก้าวผ่านวิธีการเปลี่ยนไซต์ Laravel 8 มาตรฐานหุ้นเป็นหน้า Landing Page พื้นฐาน ซึ่งสามารถลงทะเบียนผู้ใช้ในรายชื่อส่งเมลเมื่อพวกเขาส่งที่อยู่อีเมล
แม้ว่าเราจะไม่ได้เน้นเรื่องนี้มากนัก แต่เรายังได้ใช้ Laravel Mix และ Tailwind CSS เพื่อปรับปรุงกระบวนการสร้างส่วนหน้าที่กำหนดเองและมีประสิทธิภาพสำหรับแอปพลิเคชันของเรา
หากคุณต้องการทราบเพิ่มเติมเกี่ยวกับสิ่งที่ทำให้หน้า Landing Page ยอดเยี่ยม โปรดดูบทความ นี้ จาก Copyblogger มิฉะนั้น คุณสามารถค้นหาโค้ดทั้งหมดสำหรับแอปพลิเคชันที่เราสร้างในซีรีส์นี้ ได้ GitHub
Matthew Setter เป็นโปรแกรมแก้ไข PHP ในทีม Twilio Voices และ (โดยธรรมชาติ) เป็นผู้พัฒนา PHP เขายังเป็นผู้เขียน Mezzio Essentials อีกด้วย เมื่อเขาไม่ได้เขียนโค้ด PHP เขากำลังแก้ไขบทความ PHP ที่ยอดเยี่ยมที่ Twilio คุณสามารถหาเขาได้ที่ [email protected] และเขาคือ settermjd บน Twitter และ GitHub