CakePHP - คู่มือฉบับย่อ

CakePHP เป็นเฟรมเวิร์ก MVC แบบโอเพ่นซอร์ส ทำให้การพัฒนาปรับใช้และบำรุงรักษาแอปพลิเคชันง่ายขึ้นมาก CakePHP มีไลบรารีจำนวนมากเพื่อลดภาระงานส่วนใหญ่ที่มากเกินไป

ข้อดีของ CakePHP

ข้อดีของการใช้ CakePHP มีดังต่อไปนี้ -

  • โอเพ่นซอร์ส

  • กรอบ MVC

  • Templating Engine

  • การดำเนินการแคช

  • URL ที่เป็นมิตรกับเครื่องมือค้นหา

  • Easy CRUD (สร้างอ่านอัปเดตลบ) การโต้ตอบฐานข้อมูล

  • ห้องสมุดและผู้ช่วยเหลือ

  • การตรวจสอบในตัว

  • Localisation

  • อีเมลคุกกี้ความปลอดภัยเซสชันและส่วนประกอบการจัดการคำขอ

  • ดูผู้ช่วยเหลือสำหรับ AJAX, JavaScript, HTML Forms และอื่น ๆ

รอบการร้องขอ CakePHP

ภาพประกอบต่อไปนี้อธิบายถึงการทำงานของ Request Lifecycle ใน CakePHP -

รอบการร้องขอ CakePHP ทั่วไปเริ่มต้นด้วยผู้ใช้ขอเพจหรือทรัพยากรในแอปพลิเคชันของคุณ ในระดับสูงแต่ละคำขอจะดำเนินการตามขั้นตอนต่อไปนี้ -

  • กฎการเขียนเว็บเซิร์ฟเวอร์จะส่งคำขอไปที่ webroot / index.php

  • ตัวโหลดอัตโนมัติและไฟล์ bootstrap ของแอปพลิเคชันของคุณจะถูกเรียกใช้งาน

  • dispatch filters ที่กำหนดค่าไว้สามารถจัดการคำขอและสร้างการตอบกลับได้

  • ผู้มอบหมายงานจะเลือกตัวควบคุมและการดำเนินการที่เหมาะสมตามกฎการกำหนดเส้นทาง

  • เรียกการกระทำของคอนโทรลเลอร์และคอนโทรลเลอร์จะโต้ตอบกับโมเดลและส่วนประกอบที่ต้องการ

  • คอนโทรลเลอร์มอบหมายการสร้างการตอบสนองให้กับ View เพื่อสร้างผลลัพธ์ที่เกิดจากข้อมูลแบบจำลอง

  • มุมมองใช้ Helpers และ Cells เพื่อสร้างเนื้อหาตอบสนองและส่วนหัว

  • การตอบกลับจะถูกส่งกลับไปยังไคลเอนต์

ในบทนี้เราจะแสดงการติดตั้ง CakePHP 4.0.3 เวอร์ชัน PHP ขั้นต่ำที่เราต้องติดตั้งคือPHP 7.3.

คุณต้องติดตั้ง PHP 7.3 และ Composer ก่อนเริ่มการติดตั้ง cakePHP

สำหรับ Windows ผู้ใช้ติดตั้งหรืออัปเดตเซิร์ฟเวอร์ WAMP ด้วยเวอร์ชัน PHP> 7.3

ไปที่www.wampserver.com/en/download-wampserver-64bits/และติดตั้ง

สำหรับผู้ใช้ Linux โปรดดูเว็บไซต์ Tutorials Point ซึ่งมีอยู่ที่www.tutorialspoint.com/php7/php7_installation_linux.htmสำหรับการติดตั้ง PHP

การติดตั้ง Composer

ไปที่นักแต่งเพลงที่ https://getcomposer.org/download/และคลิกที่ดาวน์โหลดตามระบบปฏิบัติการ (OS) ของคอมพิวเตอร์ของคุณและติดตั้งคอมโพสิตในระบบของคุณ เพิ่มตำแหน่งไปยังตัวแปร PATH สำหรับผู้ใช้ windows เพื่อให้คุณสามารถใช้ตัวแต่งจากไดเร็กทอรีใดก็ได้

เมื่อคุณติดตั้งนักแต่งเพลงเสร็จแล้วให้เราเริ่มติดตั้ง CakePHP

การติดตั้ง CakePHP

ไปที่โฟลเดอร์ที่ wamp ตั้งอยู่สำหรับผู้ใช้ windows และใน www / โฟลเดอร์สร้างโฟลเดอร์ cakephp4/.

สำหรับผู้ใช้ Linux ให้สร้างโฟลเดอร์ var/www/html/ จากนั้นสร้างโฟลเดอร์ cakephp4/.

  • cakephp4 / คือโฟลเดอร์ที่เราจะติดตั้ง CakePHP

ใช้นักแต่งเพลงเพื่อดำเนินการคำสั่งต่อไปนี้ -

composer create-project --prefer-dist cakephp/app:4.0.3 cakephp4

นี่คือสิ่งที่คุณควรเห็นเมื่อคำสั่งดำเนินการ -

เมื่อการติดตั้งเสร็จสมบูรณ์ให้ใช้ localhost เพื่อเปิดโครงการของคุณในเบราว์เซอร์

เส้นทางเดียวกันคือ http: // localhost / cakephp

ที่นี่เราจะเรียนรู้เกี่ยวกับโครงสร้างโฟลเดอร์และอนุสัญญาการตั้งชื่อใน CakePHP เริ่มต้นด้วยการทำความเข้าใจโครงสร้างโฟลเดอร์

โครงสร้างโฟลเดอร์

ดูภาพหน้าจอต่อไปนี้ มันแสดงโครงสร้างโฟลเดอร์ของ CakePHP

ตารางต่อไปนี้อธิบายถึงบทบาทของแต่ละโฟลเดอร์ใน CakePHP -

ซีเนียร์ No ชื่อโฟลเดอร์และคำอธิบาย
1

bin

bin โฟลเดอร์มีไฟล์ปฏิบัติการคอนโซลเค้ก

2

config

configโฟลเดอร์เก็บไฟล์การกำหนดค่า (ไม่กี่) ไฟล์ที่ CakePHP ใช้ รายละเอียดการเชื่อมต่อฐานข้อมูล bootstrapping ไฟล์คอนฟิกูเรชันหลักและอื่น ๆ ควรเก็บไว้ที่นี่

3

logs

logs โดยปกติโฟลเดอร์จะมีไฟล์บันทึกของคุณขึ้นอยู่กับการกำหนดค่าบันทึกของคุณ

4

plugins

โฟลเดอร์ปลั๊กอินเป็นที่จัดเก็บปลั๊กอินของแอปพลิเคชันของคุณ

5

resources

ไฟล์สำหรับการทำให้เป็นสากลในโฟลเดอร์โลแคลตามลำดับจะถูกเก็บไว้ที่นี่ เช่น locales / en_US.

6

src

srcโฟลเดอร์จะเป็นที่ที่คุณใช้เวทมนตร์ของคุณ เป็นที่วางไฟล์แอปพลิเคชันของคุณและคุณจะพัฒนาแอปพลิเคชันส่วนใหญ่ มาดูโฟลเดอร์ใน src กัน

  • คอนโซล - มีคำสั่งคอนโซลและงานคอนโซลสำหรับแอปพลิเคชันของคุณ

  • ตัวควบคุม - ประกอบด้วยคอนโทรลเลอร์และส่วนประกอบของแอปพลิเคชันของคุณ

  • Model - ประกอบด้วยตารางเอนทิตีและพฤติกรรมของแอปพลิเคชันของคุณ

  • ดูชั้นเรียนการนำเสนอจะอยู่ที่นี่: เซลล์ตัวช่วยและไฟล์เทมเพลต

7

templates

ไฟล์การนำเสนอเทมเพลตจะอยู่ที่นี่: องค์ประกอบหน้าข้อผิดพลาดเค้าโครงและไฟล์เทมเพลตดู

8

tests

tests โฟลเดอร์จะเป็นที่ที่คุณใส่กรณีทดสอบสำหรับแอปพลิเคชันของคุณ

9

tmp

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

10

vendor

vendorโฟลเดอร์คือที่ที่จะติดตั้ง CakePHP และการอ้างอิงแอปพลิเคชันอื่น ๆ ให้คำมั่นสัญญาส่วนตัวที่จะไม่แก้ไขไฟล์ในโฟลเดอร์นี้ เราไม่สามารถช่วยคุณได้หากคุณแก้ไขแกนหลัก

11

webroot

webrootไดเร็กทอรีคือรูทเอกสารสาธารณะของแอปพลิเคชันของคุณ มันมีไฟล์ทั้งหมดที่คุณต้องการให้เข้าถึงได้แบบสาธารณะ

อนุสัญญาการตั้งชื่อ

หลักการตั้งชื่อไม่ใช่สิ่งที่บังคับให้ปฏิบัติ แต่เป็นแนวทางปฏิบัติในการเขียนโค้ดที่ดีและจะเป็นประโยชน์มากเมื่อโครงการของคุณมีขนาดใหญ่

อนุสัญญาควบคุม

ชื่อคลาสคอนโทรลเลอร์ต้องเป็นพหูพจน์ PascalCased และชื่อต้องลงท้ายด้วย Controller ตัวอย่างเช่นสำหรับนักเรียนในชั้นเรียนชื่อของคอนโทรลเลอร์สามารถเป็นได้StudentsController. วิธีการสาธารณะบนคอนโทรลเลอร์มักถูกเปิดเผยว่า 'การกระทำ' สามารถเข้าถึงได้ผ่านเว็บเบราว์เซอร์

ตัวอย่างเช่นแผนที่ / users / view ไปยังไฟล์ view()วิธีการของ UsersController ออกจากกล่อง ไม่สามารถเข้าถึงวิธีการป้องกันหรือส่วนตัวด้วยการกำหนดเส้นทาง

อนุสัญญาไฟล์และชื่อคลาส

ส่วนใหญ่เราจะเห็นว่าชื่อไฟล์คลาสของเราเกือบจะเหมือนกัน คล้ายกับใน cakephp

ตัวอย่างเช่นคลาส StudentsController จะมีชื่อไฟล์เป็น StudentsController.php ไฟล์จะต้องถูกบันทึกเป็นชื่อโมดูลและในโฟลเดอร์ที่เกี่ยวข้องในโฟลเดอร์แอพ

อนุสัญญาฐานข้อมูล

ตารางที่ใช้สำหรับโมเดล CakePHP ส่วนใหญ่มีชื่อพหูพจน์พร้อมขีดล่าง

ตัวอย่างเช่น student_details, student_marks ชื่อฟิลด์มีขีดล่างหากประกอบด้วยสองคำตัวอย่างเช่น first_name, last_name

อนุสัญญาแบบจำลอง

สำหรับโมเดลคลาสจะถูกตั้งชื่อตามตารางฐานข้อมูลชื่อเป็นพหูพจน์ PascalCased และต่อท้ายด้วย Table

ตัวอย่างเช่น StudentDetailsTable, StudentMarksTable

ดูอนุสัญญา

สำหรับเทมเพลตมุมมองไฟล์จะขึ้นอยู่กับฟังก์ชันคอนโทรลเลอร์

ตัวอย่างเช่นถ้าคลาส StudentDetailsController มีฟังก์ชัน showAll () เทมเพลตมุมมองจะถูกตั้งชื่อเป็น show_all.php และบันทึกไว้ใน template / yrmodule / show_all.php

ในบทนี้เราจะเข้าใจไฟล์ Environment Variables, General Configuration, Database Configuration และ Email Configuration ใน CakePHP

ConfigurationCakePHP มาพร้อมกับไฟล์กำหนดค่าหนึ่งไฟล์โดยค่าเริ่มต้นและเราสามารถแก้ไขได้ตามความต้องการของเรา มีโฟลเดอร์เฉพาะหนึ่งโฟลเดอร์“config”เพื่อจุดประสงค์นี้. CakePHP มาพร้อมกับตัวเลือกการกำหนดค่าต่างๆ

เริ่มต้นด้วยการทำความเข้าใจตัวแปรสภาพแวดล้อมใน CakePHP

ตัวแปรสภาพแวดล้อม

ตัวแปรสภาพแวดล้อมทำให้การทำงานของแอปพลิเคชันของคุณในสภาพแวดล้อมต่างๆเป็นเรื่องง่าย ตัวอย่างเช่นบนเซิร์ฟเวอร์ dev เซิร์ฟเวอร์ทดสอบเซิร์ฟเวอร์การจัดเตรียมและสภาพแวดล้อมเซิร์ฟเวอร์ที่ใช้งานจริง สำหรับสภาพแวดล้อมเหล่านี้คุณสามารถใช้ประโยชน์จากไฟล์env() function เพื่ออ่านการกำหนดค่าสำหรับสภาพแวดล้อมที่คุณต้องการและสร้างแอปพลิเคชันของคุณ

ในโฟลเดอร์ config ของคุณคุณจะเจอ config / .env.example ไฟล์นี้มีตัวแปรทั้งหมดที่จะเปลี่ยนแปลงตามสภาพแวดล้อมของคุณ ในการเริ่มต้นคุณสามารถสร้างไฟล์ในโฟลเดอร์ config เช่น config / .env และกำหนดตัวแปรเหล่านั้นและใช้งานได้ ในกรณีที่คุณต้องการตัวแปรเพิ่มเติมก็สามารถเข้าไปในไฟล์นั้นได้

คุณสามารถอ่านตัวแปรสภาพแวดล้อมของคุณโดยใช้ฟังก์ชัน env () ดังที่แสดงด้านล่าง -

ตัวอย่าง

$debug = env('APP_DEBUG', false);

ค่าแรกคือชื่อของตัวแปรสภาพแวดล้อมที่คุณต้องการและค่าที่สองคือค่าเริ่มต้น ค่าดีฟอลต์ถูกใช้หากไม่พบค่าสำหรับตัวแปรสภาวะแวดล้อม

การกำหนดค่าทั่วไป

ตารางต่อไปนี้อธิบายถึงบทบาทของตัวแปรต่างๆและผลกระทบต่อแอปพลิเคชัน CakePHP ของคุณอย่างไร

ซีเนียร์ No ชื่อตัวแปรและคำอธิบาย
1

debug

เปลี่ยนเอาต์พุตการดีบัก CakePHP

false= โหมดการผลิต ไม่มีข้อความแสดงข้อผิดพลาดข้อผิดพลาดหรือคำเตือน

true = แสดงข้อผิดพลาดและคำเตือน

2

App.namespace

เนมสเปซสำหรับค้นหาคลาสของแอปภายใต้

3

App.baseUrl

ยกเลิกการแสดงความคิดเห็นคำจำกัดความนี้หากคุณไม่ได้วางแผนที่จะใช้ mod_rewrite ของ Apache กับ CakePHP อย่าลืมลบไฟล์. htaccess ของคุณด้วย

4

App.base

ไดเร็กทอรีฐานที่แอปอยู่หากเป็นเท็จระบบจะตรวจพบโดยอัตโนมัติ

5

App.encoding

กำหนดว่าแอปพลิเคชันของคุณใช้การเข้ารหัสอะไร การเข้ารหัสนี้ใช้เพื่อสร้างชุดอักขระในโครงร่างและเข้ารหัสเอนทิตี ควรตรงกับค่าการเข้ารหัสที่ระบุสำหรับฐานข้อมูลของคุณ

6

App.webroot

ไดเร็กทอรี webroot

7

App.wwwRoot

เส้นทางไฟล์ไปยัง webroot

8

App.fullBaseUrl

ชื่อโดเมนแบบเต็ม (รวมถึงโปรโตคอล) ไปยังรูทของแอปพลิเคชันของคุณ

9

App.imageBaseUrl

เส้นทางเว็บไปยังไดเร็กทอรีรูปภาพสาธารณะภายใต้ webroot

10

App.cssBaseUrl

เส้นทางเว็บไปยังไดเร็กทอรี css สาธารณะภายใต้ webroot

11

App.jsBaseUrl

เส้นทางเว็บไปยังไดเร็กทอรี js สาธารณะภายใต้ webroot

12

App.paths

กำหนดค่าพา ธ สำหรับรีซอร์สที่ไม่ใช่คลาส รองรับไฟล์plugins, templates, locales, subkeys, ซึ่งอนุญาตให้กำหนดเส้นทางสำหรับปลั๊กอินดูเทมเพลตและไฟล์โลแคลตามลำดับ

13

Security.salt

สตริงสุ่มที่ใช้ในการแฮช ค่านี้ยังใช้เป็นเกลือ HMAC เมื่อทำการเข้ารหัสแบบสมมาตร

14

Asset.timestamp

ผนวกการประทับเวลาซึ่งเป็นเวลาที่แก้ไขล่าสุดของไฟล์เฉพาะที่ท้าย URL ของไฟล์เนื้อหา (CSS, JavaScript, รูปภาพ) เมื่อใช้ตัวช่วยที่เหมาะสม ค่าที่ถูกต้องคือ -

  • (bool) false - ไม่ทำอะไรเลย (ค่าเริ่มต้น)

  • (bool) true - ผนวกการประทับเวลาเมื่อดีบักเป็นจริง

  • (string) 'force' - ต่อท้ายการประทับเวลาเสมอ

การกำหนดค่าฐานข้อมูล

สามารถกำหนดค่าฐานข้อมูลในรูปแบบ config/app.php and config/app_local.phpไฟล์. ไฟล์นี้มีการเชื่อมต่อเริ่มต้นพร้อมพารามิเตอร์ที่ให้ไว้ซึ่งสามารถแก้ไขได้ตามที่เราเลือก

ข้อมูลโค้ดด้านล่างแสดงพารามิเตอร์และค่าเริ่มต้นซึ่งควรแก้ไขตามข้อกำหนด

Config / app_local.php

*/
   'Datasources' => [
      'default' => [
         'host' => 'localhost',
         'username' => 'my_app',
         'password' => 'secret',
         'database' => 'my_app',
         'url' => env('DATABASE_URL', null),
      ],
      /*
         * The test connection is used during the test suite.
      */
      'test' => [
         'host' => 'localhost',
         //'port' => 'non_standard_port_number',
         'username' => 'my_app',
         'password' => 'secret',
         'database' => 'test_myapp',
         //'schema' => 'myapp',
      ],
   ],

ให้เราเข้าใจแต่ละพารามิเตอร์โดยละเอียดใน config/app_local.php.

โฮสต์

ชื่อโฮสต์ของเซิร์ฟเวอร์ฐานข้อมูล (หรือที่อยู่ IP)

ชื่อผู้ใช้

ชื่อผู้ใช้ฐานข้อมูล

รหัสผ่าน

รหัสผ่านฐานข้อมูล

ฐานข้อมูล

ชื่อฐานข้อมูล

ท่าเรือ

พอร์ต TCP หรือซ็อกเก็ต Unix ที่ใช้เชื่อมต่อกับเซิร์ฟเวอร์

config / app.php

'Datasources' => [
   'default' => [
      'className' => Connection::class,
      'driver' => Mysql::class,
      'persistent' => false,
      'timezone' => 'UTC',
      //'encoding' => 'utf8mb4',
      'flags' => [],
      'cacheMetadata' => true,
      'log' => false,
      'quoteIdentifiers' => false,
      //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
   ],
]

ให้เราเข้าใจแต่ละพารามิเตอร์โดยละเอียดใน config/app.php.

บันทึก
ซีเนียร์ No คีย์และคำอธิบาย
1

className

ชื่อคลาสเนมสเปซแบบเต็มของคลาสที่แสดงถึงการเชื่อมต่อกับเซิร์ฟเวอร์ฐานข้อมูล คลาสนี้มีหน้าที่โหลดไดรเวอร์ฐานข้อมูลจัดเตรียมกลไกธุรกรรม SQL และเตรียมคำสั่ง SQL เหนือสิ่งอื่นใด

2

driver

ชื่อคลาสของไดรเวอร์ที่ใช้เพื่อใช้งานความจำเพาะทั้งหมดสำหรับเครื่องมือฐานข้อมูล ซึ่งอาจเป็นชื่อคลาสสั้น ๆ โดยใช้ไวยากรณ์ของปลั๊กอินชื่อเนมสเปซแบบเต็มหรืออินสแตนซ์ไดรเวอร์ที่สร้างขึ้น ตัวอย่างของชื่อคลาสแบบสั้น ได้แก่ Mysql, Sqlite, Postgres และ Sqlserver

3

persistent

ไม่ว่าจะใช้การเชื่อมต่อถาวรกับฐานข้อมูลหรือไม่

4

encoding

ระบุชุดอักขระที่จะใช้เมื่อส่งคำสั่ง SQL ไปยังเซิร์ฟเวอร์เช่น 'utf8' เป็นต้น

5

timezone

เขตเวลาของเซิร์ฟเวอร์ที่จะตั้งค่า

6

init

รายการของคิวรีที่ควรส่งไปยังเซิร์ฟเวอร์ฐานข้อมูลเมื่อสร้างการเชื่อมต่อ

7

log

ตั้งค่าเป็น true เพื่อเปิดใช้งานการบันทึกแบบสอบถาม เมื่อเปิดใช้งานแบบสอบถามจะถูกบันทึกในระดับการดีบักด้วยขอบเขต queriesLog

8

quoteIdentifiers

ตั้งค่าเป็นจริงหากคุณใช้คำสงวนหรืออักขระพิเศษในชื่อตารางหรือคอลัมน์ของคุณ การเปิดใช้การตั้งค่านี้จะส่งผลให้คิวรีที่สร้างโดยใช้ Query Builder มีตัวระบุที่อ้างถึงเมื่อสร้าง SQL มันลดประสิทธิภาพ

9

flags

อาร์เรย์ที่เชื่อมโยงของค่าคงที่ PDO ที่ควรส่งผ่านไปยังอินสแตนซ์ PDO ที่อยู่ภายใต้

10

cacheMetadata

ไม่ว่าจะเป็นแบบบูลีนจริงหรือสตริงที่มีการกำหนดค่าแคชเพื่อจัดเก็บข้อมูลเมตาไม่แนะนำให้ปิดใช้งานการแคชข้อมูลเมตาและอาจส่งผลให้ประสิทธิภาพต่ำมาก

การกำหนดค่าอีเมล

สามารถกำหนดค่าอีเมลในไฟล์ได้ config/app.php. ไม่จำเป็นต้องกำหนดการกำหนดค่าอีเมลใน config / app.php สามารถใช้อีเมลได้โดยไม่ต้องใช้ เพียงใช้วิธีการที่เกี่ยวข้องเพื่อตั้งค่าการกำหนดค่าทั้งหมดแยกกันหรือโหลดอาร์เรย์ของการกำหนดค่า การกำหนดค่าสำหรับค่าเริ่มต้นของอีเมลถูกสร้างขึ้นโดยใช้config() และ configTransport().

การขนส่งการกำหนดค่าอีเมล

ด้วยการกำหนดการขนส่งแยกจากโปรไฟล์การจัดส่งคุณสามารถใช้การกำหนดค่าการขนส่งซ้ำในหลายโปรไฟล์ได้อย่างง่ายดาย คุณสามารถระบุการกำหนดค่าต่างๆสำหรับการผลิตการพัฒนาและการทดสอบ การขนส่งแต่ละรายการต้องการ className ตัวเลือกที่ถูกต้องมีดังนี้ -

  • Mail - ส่งโดยใช้ฟังก์ชันเมล PHP

  • Smtp - ส่งโดยใช้ SMTP

  • Debug - อย่าส่งอีเมลเพียงส่งคืนผลลัพธ์

คุณสามารถเพิ่มการขนส่งแบบกำหนดเอง (หรือแทนที่การขนส่งที่มีอยู่) โดยเพิ่มไฟล์ที่เหมาะสมลงใน src/Mailer/Transport. ควรตั้งชื่อการขนส่งYourTransport.php, ที่ไหน 'Your' คือชื่อของการขนส่ง

ต่อไปนี้เป็นตัวอย่างของการขนส่งการกำหนดค่าอีเมล

'EmailTransport' => [
   'default' => [
      'className' => 'Mail',
      // The following keys are used in SMTP transports
      'host' => 'localhost',
      'port' => 25,
      'timeout' => 30,
      'username' => 'user',
      'password' => 'secret',
      'client' => null,
      'tls' => null,
      'url' => env('EMAIL_TRANSPORT_DEFAULT_URL', null),
   ],
],

โปรไฟล์การส่งอีเมล

โปรไฟล์การจัดส่งช่วยให้คุณกำหนดคุณสมบัติต่างๆเกี่ยวกับข้อความอีเมลจากแอปพลิเคชันของคุณได้ล่วงหน้าและตั้งชื่อการตั้งค่า ซึ่งจะช่วยประหยัดการทำซ้ำในแอปพลิเคชันของคุณและทำให้การบำรุงรักษาและการพัฒนาง่ายขึ้น แต่ละโปรไฟล์ยอมรับคีย์จำนวนหนึ่ง

ต่อไปนี้เป็นตัวอย่างโปรไฟล์การส่งอีเมล

'Email' => [
   'default' => [
   
      'transport' => 'default',
      'from' => 'you@localhost',
   ],
],

ในบทนี้เราจะเรียนรู้หัวข้อต่อไปนี้ที่เกี่ยวข้องกับการกำหนดเส้นทาง -

  • ข้อมูลเบื้องต้นเกี่ยวกับการกำหนดเส้นทาง
  • การเชื่อมต่อเส้นทาง
  • การส่งผ่านอาร์กิวเมนต์ไปยังเส้นทาง
  • การสร้าง URL
  • URL เปลี่ยนเส้นทาง

ข้อมูลเบื้องต้นเกี่ยวกับการกำหนดเส้นทาง

ในส่วนนี้เราจะดูวิธีที่คุณสามารถใช้เส้นทางวิธีที่คุณสามารถส่งผ่านอาร์กิวเมนต์จาก URL ไปยังการดำเนินการของผู้ควบคุมวิธีสร้าง URL และวิธีเปลี่ยนเส้นทางไปยัง URL ที่ต้องการ โดยปกติเส้นทางจะถูกนำไปใช้ในไฟล์config/routes.php. การกำหนดเส้นทางสามารถทำได้สองวิธี -

  • วิธีการคงที่
  • ตัวสร้างเส้นทางที่กำหนดขอบเขต

นี่คือตัวอย่างที่นำเสนอทั้งสองประเภท

// Using the scoped route builder.
Router::scope('/', function ($routes) {
   $routes->connect('/', ['controller' => 'Articles', 'action' => 'index']);
});
// Using the static method.
Router::connect('/', ['controller' => 'Articles', 'action' => 'index']);

ทั้งสองวิธีจะเรียกใช้วิธีดัชนีของ ArticlesController. จากสองวิธีนี้scoped route builder ให้ประสิทธิภาพที่ดีขึ้น

การเชื่อมต่อเส้นทาง

Router::connect()ใช้วิธีการเชื่อมต่อเส้นทาง ต่อไปนี้เป็นไวยากรณ์ของวิธีการ -

static Cake\Routing\Router::connect($route, $defaults =[], $options =[])

มีสามอาร์กิวเมนต์สำหรับไฟล์ Router::connect() วิธีการ -

  • อาร์กิวเมนต์แรกมีไว้สำหรับเทมเพลต URL ที่คุณต้องการจับคู่

  • อาร์กิวเมนต์ที่สองมีค่าเริ่มต้นสำหรับองค์ประกอบเส้นทางของคุณ

  • อาร์กิวเมนต์ที่สามมีตัวเลือกสำหรับเส้นทางซึ่งโดยทั่วไปมีกฎนิพจน์ทั่วไป

นี่คือรูปแบบพื้นฐานของเส้นทาง -

$routes->connect(
   'URL template',
   ['default' => 'defaultValue'],
   ['option' => 'matchingRegex']
);

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ไฟล์ดังที่แสดงด้านล่าง

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   // Register scoped middleware for in scopes.
      $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   $builder->connect('/', ['controller' => 'Tests', 'action' => 'show']); $builder->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
   $builder->fallbacks();
});

สร้างไฟล์ TestsController.php ไฟล์ที่ src/Controller/TestsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/TestsController.php

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class TestsController extends AppController {
   public function show()
   {
   }
}

สร้างโฟลเดอร์ Tests ภายใต้ src/Template และภายใต้โฟลเดอร์นั้นให้สร้างไฟล์ View fileเรียกว่า show.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Tests/show.php

<h1>This is CakePHP tutorial and this is an example of connecting routes.</h1>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ซึ่งมีอยู่ที่ http: // localhost / cakephp4 /

เอาต์พุต

URL ด้านบนจะให้ผลลัพธ์ดังต่อไปนี้

ผ่านข้อโต้แย้ง

อาร์กิวเมนต์ที่ส่งผ่านคืออาร์กิวเมนต์ที่ส่งผ่านใน URL อาร์กิวเมนต์เหล่านี้สามารถส่งผ่านไปยังการกระทำของคอนโทรลเลอร์ได้ อาร์กิวเมนต์ที่ส่งผ่านเหล่านี้มอบให้กับคอนโทรลเลอร์ของคุณสามวิธี

เป็นอาร์กิวเมนต์ของวิธีการดำเนินการ

ตัวอย่างต่อไปนี้แสดงให้เห็นว่าเราสามารถส่งผ่านข้อโต้แย้งไปยังการกระทำของคอนโทรลเลอร์ได้อย่างไร ไปที่ URL ต่อไปนี้ที่ http: // localhost / cakephp4 / testing / value1 / value2

สิ่งนี้จะตรงกับเส้นเส้นทางต่อไปนี้

$builder->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);

ที่นี่ค่า 1 จาก URL จะถูกกำหนดให้กับ arg1 และ value2 จะถูกกำหนดให้กับ arg2

เป็นอาร์เรย์ดัชนีเชิงตัวเลข

เมื่ออาร์กิวเมนต์ถูกส่งไปยังการกระทำของคอนโทรลเลอร์คุณจะได้รับอาร์กิวเมนต์ด้วยคำสั่งต่อไปนี้

$args = $this->request->params[‘pass’]

อาร์กิวเมนต์ที่ส่งไปยังการกระทำของคอนโทรลเลอร์จะถูกเก็บไว้ในตัวแปร $ args

ใช้เส้นทางอาร์เรย์

อาร์กิวเมนต์สามารถส่งผ่านไปยังการดำเนินการโดยคำสั่งต่อไปนี้ -

$routes->connect('/', ['controller' => 'Tests', 'action' => 'show',5,6]);

ข้อความข้างต้นจะส่งสองอาร์กิวเมนต์ 5 และ 6 ไปยังเมธอด TestController's show ()

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { // Register scoped middleware for in scopes. $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); $builder->connect('tests/:arg1/:arg2', ['controller' => 'Tests', 'action' => 'show'],['pass' => ['arg1', 'arg2']]);
   $builder->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); $builder->fallbacks();
});

สร้างไฟล์ TestsController.php ไฟล์ที่ src/Controller/TestsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/TestsController.php

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class TestsController extends AppController {
public function show($arg1, $arg2) {
      $this->set('argument1',$arg1);
      $this->set('argument2',$arg2);
   }
}

สร้างโฟลเดอร์ Tests ที่ src/Template และภายใต้โฟลเดอร์นั้นให้สร้างไฟล์ Viewไฟล์ชื่อ show.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Tests/show.php.

<h1>This is CakePHP tutorial and this is an example of Passed arguments.</h1>
<?php
   echo "Argument-1:".$argument1."<br/>"; echo "Argument-2:".$argument2."<br/>";
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ http: // localhost / cakephp4 / testing / Virat / Kunal

เอาต์พุต

เมื่อดำเนินการ URL ด้านบนจะสร้างผลลัพธ์ต่อไปนี้

การสร้าง URL

นี่คือคุณสมบัติเด็ดของ CakePHP ด้วยการใช้ URL ที่สร้างขึ้นเราสามารถเปลี่ยนโครงสร้างของ URL ในแอปพลิเคชันได้อย่างง่ายดายโดยไม่ต้องแก้ไขโค้ดทั้งหมด

url( string|array|null $url null , boolean $full false )

ฟังก์ชันข้างต้นจะรับสองอาร์กิวเมนต์ -

  • อาร์กิวเมนต์แรกคืออาร์เรย์ที่ระบุสิ่งต่อไปนี้ - 'controller', 'action', 'plugin'. นอกจากนี้คุณสามารถระบุองค์ประกอบที่กำหนดเส้นทางหรือพารามิเตอร์สตริงการสืบค้น หากเป็นสตริงก็สามารถกำหนดชื่อของสตริง URL ที่ถูกต้องได้

  • หากเป็นจริง URL ฐานแบบเต็มจะอยู่ข้างหน้าผลลัพธ์ ค่าเริ่มต้นเป็นเท็จ

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { // Register scoped middleware for in scopes. $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); $builder->connect('/generate',['controller'=>'Generates','action'=>'show']);
   $builder->fallbacks();
});

สร้างไฟล์ GeneratesController.php ไฟล์ที่ src/Controller/GeneratesController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/GeneratesController.php

<?php
declare(strict_types=1);
namespace App\Controller;
21
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class GeneratesController extends AppController {
   public function show()
   {
   }
}

สร้างโฟลเดอร์ Generates at src/Template และภายใต้โฟลเดอร์นั้นให้สร้างไฟล์ Viewไฟล์ชื่อ show.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Generates/show.php

<h1>This is CakePHP tutorial and this is an example of Generating URLs<h1>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ -

http: // localhost / cakephp4 / สร้าง

เอาต์พุต

URL ด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -

เปลี่ยนเส้นทางการกำหนดเส้นทาง

การกำหนดเส้นทางการเปลี่ยนเส้นทางมีประโยชน์เมื่อเราต้องการแจ้งแอปพลิเคชันไคลเอนต์ว่า URL นี้ถูกย้ายไปแล้ว URL สามารถเปลี่ยนเส้นทางได้โดยใช้ฟังก์ชันต่อไปนี้ -

static Cake\Routing\Router::redirect($route, $url, $options =[])

มีสามอาร์กิวเมนต์สำหรับฟังก์ชันข้างต้นดังนี้ -

  • สตริงที่อธิบายเทมเพลตของเส้นทาง

  • URL ที่จะเปลี่ยนเส้นทางไป

  • อาร์เรย์ที่ตรงกับองค์ประกอบที่มีชื่อในเส้นทางไปยังนิพจน์ทั่วไปซึ่งองค์ประกอบนั้นควรจับคู่

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.phpไฟล์ดังที่แสดงด้านล่าง ที่นี่เราได้ใช้คอนโทรลเลอร์ที่สร้างขึ้นก่อนหน้านี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { // Register scoped middleware for in scopes. $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); $builder->connect('/generate',['controller'=>'Generates','action'=>'show']);
   $builder->redirect('/redirect','https://tutorialspoint.com/'); $builder->fallbacks();
});

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้

URL 1 - http: // localhost / cakephp4 / สร้าง

เอาต์พุตสำหรับ URL 1

URL 2 - http: // localhost / cakephp4 / เปลี่ยนเส้นทาง

เอาต์พุตสำหรับ URL 2

คุณจะถูกเปลี่ยนเส้นทางไปที่ https://tutorialspoint.com

ตัวควบคุมตามชื่อระบุว่าควบคุมแอปพลิเคชัน มันทำหน้าที่เหมือนสะพานเชื่อมระหว่างโมเดลและมุมมอง ตัวควบคุมจัดการกับข้อมูลคำขอตรวจสอบให้แน่ใจว่ามีการเรียกแบบจำลองที่ถูกต้องและแสดงผลการตอบกลับหรือมุมมองที่ถูกต้อง

มีการเรียกวิธีการในคลาสของคอนโทรลเลอร์ actions. คอนโทรลเลอร์แต่ละตัวทำตามหลักการตั้งชื่อ ชื่อคลาส Controller อยู่ในรูปพหูพจน์ Camel Cased และลงท้ายด้วย Controller -PostsController.

AppController

AppConttrollerคลาสเป็นคลาสหลักของคอนโทรลเลอร์ของแอปพลิเคชันทั้งหมด คลาสนี้ขยายไฟล์Controllerคลาส CakePHP AppController ถูกกำหนดไว้ที่src/Controller/AppController.php. ไฟล์มีรหัสต่อไปนี้

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Controller\Controller;
class AppController extends Controller {
   public function initialize(): void {
      parent::initialize();
      $this->loadComponent('RequestHandler'); $this->loadComponent('Flash');
   }
}

AppControllerสามารถใช้เพื่อโหลดส่วนประกอบที่จะใช้ในทุกคอนโทรลเลอร์ของแอปพลิเคชันของคุณ แอตทริบิวต์และวิธีการที่สร้างขึ้นใน AppController จะพร้อมใช้งานในคอนโทรลเลอร์ทั้งหมดที่ขยาย initialize() วิธีการจะถูกเรียกใช้ที่ส่วนท้ายของคอนสตรัคเตอร์ของคอนโทรลเลอร์เพื่อโหลดส่วนประกอบ

การดำเนินการของคอนโทรลเลอร์

วิธีการในคลาสคอนโทรลเลอร์เรียกว่าการดำเนินการ การดำเนินการเหล่านี้มีหน้าที่ในการส่งการตอบสนองที่เหมาะสมสำหรับเบราว์เซอร์ / ผู้ใช้ที่ร้องขอ มุมมองถูกแสดงโดยชื่อของการกระทำเช่นชื่อของวิธีการในตัวควบคุม

ตัวอย่าง

class RecipesController extends AppController {
   public function view($id) { // Action logic goes here. } public function share($customerId, $recipeId) { // Action logic goes here. } public function search($query) {
      // Action logic goes here.
   }
}

ดังที่คุณเห็นในตัวอย่างด้านบนไฟล์ RecipesController มี 3 การกระทำ - View, แบ่งปันและ Search.

กำลังเปลี่ยนเส้นทาง

สำหรับการเปลี่ยนเส้นทางผู้ใช้ไปยังการกระทำอื่นของคอนโทรลเลอร์เดียวกันเราสามารถใช้เมธอด setAction () ต่อไปนี้เป็นไวยากรณ์สำหรับเมธอด setAction ()

Cake\Controller\Controller::setAction($action, $args...)

รหัสต่อไปนี้จะเปลี่ยนเส้นทางผู้ใช้ไปยังดัชนีการกระทำของตัวควบคุมเดียวกัน

$this->setAction('index');

ตัวอย่างต่อไปนี้แสดงการใช้งานวิธีการข้างต้น

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   // Register scoped middleware for in scopes.
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf'); 
   $builder->connect('/redirect-controller',['controller'=>'Redirects','action'=>'action1']); $builder->connect('/redirect-controller2',['controller'=>'Redirects','action'=>'action2']);
   $builder->fallbacks();
});

สร้างไฟล์ RedirectsController.phpไฟล์ที่ src / Controller / RedirectsController.php คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/RedirectsController.php

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class RedirectsController extends AppController {
   public function action1() {
   }
   public function action2(){
      echo "redirecting from action2";
      $this->setAction('action1');
   }
}

สร้างไดเร็กทอรี Redirects ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ action1.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Redirects/action1.php

<h1>This is an example of how to redirect within controller.</h1>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้

http: // localhost / cakephp4 / redirect-controller

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

ตอนนี้ไปที่ URL ต่อไปนี้: http: // localhost / cakephp4 / redirect-controller2

URL ด้านบนจะให้ผลลัพธ์ดังต่อไปนี้

กำลังโหลดโมเดล

ใน CakePHP สามารถโหลดโมเดลได้โดยใช้ไฟล์ loadModel()วิธี. ต่อไปนี้เป็นไวยากรณ์สำหรับloadModel() วิธีการ -

Cake\Controller\Controller::loadModel(string $modelClass, string $type)

มีสองอาร์กิวเมนต์สำหรับฟังก์ชันข้างต้นดังนี้ -

  • อาร์กิวเมนต์แรกคือชื่อของคลาสโมเดล

  • อาร์กิวเมนต์ที่สองคือประเภทของที่เก็บที่จะโหลด

ตัวอย่าง

หากคุณต้องการโหลด Articles model ในคอนโทรลเลอร์คุณสามารถโหลดได้โดยเขียนบรรทัดต่อไปนี้ในการกระทำของคอนโทรลเลอร์

$this->loadModel('Articles');

ตัวอักษร“ V” ใน MVC ใช้สำหรับ Views มุมมองมีหน้าที่ในการส่งเอาต์พุตไปยังผู้ใช้ตามคำขอView Classes เป็นวิธีที่มีประสิทธิภาพในการเร่งกระบวนการพัฒนา

ดูเทมเพลต

ไฟล์ View Templates ของ CakePHP รับข้อมูลจากคอนโทรลเลอร์จากนั้นแสดงผลลัพธ์เพื่อให้สามารถแสดงต่อผู้ใช้ได้อย่างเหมาะสม เราสามารถใช้ตัวแปรโครงสร้างการควบคุมต่างๆในเทมเพลต

ไฟล์เทมเพลตจะถูกเก็บไว้ใน src/Template/ในไดเร็กทอรีที่ตั้งชื่อตามคอนโทรลเลอร์ที่ใช้ไฟล์และตั้งชื่อตามการกระทำที่สอดคล้องกับ ตัวอย่างเช่นไฟล์Viewไฟล์สำหรับตัวควบคุมผลิตภัณฑ์ “view()” โดยปกติจะพบใน src / Template / Products / view.php

เรียกสั้น ๆ ว่าชื่อคอนโทรลเลอร์ (ProductsController) เหมือนกับชื่อของโฟลเดอร์ (Products) แต่ไม่มีคำว่า Controller และชื่อของ action / method (view ()) ของ Controller (ProductsController) จะเหมือนกับชื่อของ ไฟล์ View (view.php)

ดูตัวแปร

ตัวแปรมุมมองคือตัวแปรที่ได้รับค่าจากตัวควบคุม เราสามารถใช้ตัวแปรในเทมเพลตมุมมองได้มากเท่าที่เราต้องการ เราสามารถใช้ไฟล์set()วิธีการส่งผ่านค่าไปยังตัวแปรในมุมมอง ตัวแปรชุดเหล่านี้จะพร้อมใช้งานทั้งในมุมมองและเค้าโครงที่การกระทำของคุณแสดงผล ต่อไปนี้เป็นไวยากรณ์ของset() วิธี.

Cake\View\View::set(string $var, mixed $value)

วิธีนี้ใช้สองอาร์กิวเมนต์ - the name of the variable และ its value.

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   // Register scoped middleware for in scopes.
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   $builder->connect('template',['controller'=>'Products','action'=>'view']); $builder->fallbacks();
});

สร้างไฟล์ ProductsController.php ไฟล์ที่ src/Controller/ProductsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/ProductsController.php

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class ProductsController extends AppController {
public function view(){
      $this->set('Product_Name','XYZ');
   }
}

สร้างไดเรกทอรีผลิตภัณฑ์ที่ src/Template และภายใต้โฟลเดอร์นั้นให้สร้างไฟล์ Viewไฟล์ชื่อ view.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

Value of variable is: <?php echo $Product_Name; ? >

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้

http: // localhost / cakephp4 / template

เอาต์พุต

URL ด้านบนจะสร้างผลลัพธ์ต่อไปนี้

หลายครั้งในขณะที่สร้างหน้าเว็บเราต้องการทำซ้ำบางส่วนของหน้าในหน้าอื่น ๆ CakePHP มีสิ่งอำนวยความสะดวกดังกล่าวซึ่งสามารถขยายมุมมองในมุมมองอื่นได้และสำหรับสิ่งนี้เราไม่จำเป็นต้องทำรหัสซ้ำอีก

extend() วิธีการใช้เพื่อขยายมุมมองใน Viewไฟล์. เมธอดนี้ใช้อาร์กิวเมนต์เดียวคือชื่อของไฟล์มุมมองพร้อมพา ธ อย่าใช้นามสกุล. ctp ในขณะที่ระบุชื่อของไฟล์ View

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); $builder->connect('extend',['controller'=>'Extends','action'=>'index']);
   $builder->fallbacks();
});

สร้างไฟล์ ExtendsController.php ไฟล์ที่ src/Controller/ExtendsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src / Controller / ExtendsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class ExtendsController extends AppController{
      public function index(){
      }
   }
?>

สร้างไดเร็กทอรี Extends ที่ src/Template และภายใต้โฟลเดอร์นั้นให้สร้างไฟล์ Viewไฟล์ชื่อ header.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / ขยาย / header.php

<div align="center">
   <h1>Common Header</h1>
</div>
<?= $this->fetch('content') ?>

สร้างใหม่ View ภายใต้ Extends ไดเรกทอรีที่เรียกว่า index.php.คัดลอกรหัสต่อไปนี้ในไฟล์นั้น ที่นี่เรากำลังขยายมุมมองด้านบนheader.php.

src / แม่แบบ / ขยาย / index.php

<?php $this->extend('header'); ?>
This is an example of extending view.

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ http: // localhost / cakephp4 / expand

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

บางส่วนของหน้าเว็บซ้ำกันบนหน้าเว็บหลายหน้า แต่อยู่คนละตำแหน่งกัน CakePHP สามารถช่วยให้เรานำชิ้นส่วนซ้ำ ๆ เหล่านี้กลับมาใช้ใหม่ได้ เรียกว่าชิ้นส่วนที่ใช้ซ้ำได้เหล่านี้Elements - help box, extra menu, ฯลฯ โดยพื้นฐานแล้วองค์ประกอบคือ mini-view. เรายังสามารถส่งผ่านตัวแปรในองค์ประกอบ

Cake\View\View::element(string $elementPath, array $data, array $options =[]

มีสามอาร์กิวเมนต์สำหรับฟังก์ชันข้างต้นดังนี้ -

  • อาร์กิวเมนต์แรกคือชื่อของไฟล์เทมเพลตในไฟล์ /src/Template/element/ โฟลเดอร์

  • อาร์กิวเมนต์ที่สองคืออาร์เรย์ของข้อมูลที่จะทำให้พร้อมใช้งานสำหรับมุมมองที่แสดงผล

  • อาร์กิวเมนต์ที่สามมีไว้สำหรับอาร์เรย์ของตัวเลือก เช่นแคช

จาก 3 อาร์กิวเมนต์อันแรกเป็นข้อบังคับในขณะที่ส่วนที่เหลือเป็นทางเลือก

ตัวอย่าง

สร้างไฟล์องค์ประกอบที่ src/Template/element ไดเรกทอรีที่เรียกว่า helloworld.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / องค์ประกอบ / helloworld.php

<p>Hello World</p>

สร้างโฟลเดอร์ Elems ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ index.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / Elems / index.php

Element Example: <?php echo $this->element('helloworld'); ?>

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   $builder->connect('/element-example',['controller'=>'Elems','action'=>'index']); $builder->fallbacks();
});

สร้างไฟล์ ElemsController.php ไฟล์ที่ src/Controller/ElemsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src / คอนโทรลเลอร์ / ElemsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class ElemsController extends AppController{
      public function index(){
      }
   }
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ http: // localhost / cakephp4 / element-example

เอาต์พุต

เมื่อดำเนินการ URL ด้านบนจะให้ผลลัพธ์ต่อไปนี้แก่คุณ

มีการเรียกกลับ / เหตุการณ์หลายอย่างที่เราสามารถใช้กับ View Events ได้ เหตุการณ์เหล่านี้มีประโยชน์ในการดำเนินการหลายอย่างก่อนที่จะเกิดอะไรขึ้นหรือหลังจากเกิดอะไรขึ้น ต่อไปนี้เป็นรายการโทรกลับที่สามารถใช้ได้กับ CakePHP -

ซีเนียร์ No ฟังก์ชันและคำอธิบายเหตุการณ์
1

Helper::beforeRender(Event $event,$viewFile)

beforeRender เมธอดถูกเรียกตามเมธอด beforeRender ของคอนโทรลเลอร์ แต่ก่อนที่คอนโทรลเลอร์จะแสดงผล view และ layout. สิ่งนี้ได้รับไฟล์ที่แสดงเป็นอาร์กิวเมนต์

2

Helper::beforeRenderFile(Event $event, $viewFile)

วิธีนี้เรียกว่าก่อนที่จะแสดงไฟล์มุมมองแต่ละไฟล์ ซึ่งรวมถึงelements, views, parent views และ layouts.

3

Helper::afterRenderFile(Event $event, $viewFile, $content)

วิธีนี้เรียกว่าหลังจากแสดงไฟล์ View แต่ละไฟล์ ซึ่งรวมถึงelements, views, parent views และ layouts. การโทรกลับสามารถแก้ไขและส่งคืนได้$content เพื่อเปลี่ยนวิธีแสดงเนื้อหาที่แสดงในเบราว์เซอร์

4

Helper::afterRender(Event $event, $viewFile)

เมธอดนี้เรียกว่าหลังจากแสดงผลมุมมองแล้ว แต่ก่อนที่การเรนเดอร์เค้าโครงจะเริ่มขึ้น

5

Helper::beforeLayout(Event $event, $layoutFile)

วิธีนี้เรียกว่าก่อนเริ่มการแสดงเค้าโครง สิ่งนี้ได้รับชื่อไฟล์เค้าโครงเป็นอาร์กิวเมนต์

6

Helper::afterLayout(Event $event, $layoutFile)

วิธีนี้เรียกว่าหลังจากการแสดงเค้าโครงเสร็จสมบูรณ์ สิ่งนี้ได้รับชื่อไฟล์เค้าโครงเป็นอาร์กิวเมนต์

การทำงานกับฐานข้อมูลใน CakePHP นั้นง่ายมาก เราจะเข้าใจการดำเนินการ CRUD (สร้างอ่านอัปเดตลบ) ในบทนี้

นอกจากนี้เรายังต้องกำหนดค่าฐานข้อมูลของเราใน config/app_local.php file.

'Datasources' => [
   'default' => [
      'host' => 'localhost',
      'username' => 'my_app',
      'password' => 'secret',
      'database' => 'my_app',
      'url' => env('DATABASE_URL', null),
   ],
   /*
      * The test connection is used during the test suite.
   */
   'test' => [
      'host' => 'localhost',
      //'port' => 'non_standard_port_number',
      'username' => 'my_app',
      'password' => 'secret',
      'database' => 'test_myapp',
      //'schema' => 'myapp',
   ],
],

การเชื่อมต่อเริ่มต้นมีรายละเอียดดังต่อไปนี้ -

'host' => 'localhost',
   'username' => 'my_app',
   'password' => 'secret',
   'database' => 'my_app',

คุณสามารถเปลี่ยนแปลงรายละเอียดเช่นโฮสต์ชื่อผู้ใช้รหัสผ่านและฐานข้อมูลตามที่คุณเลือก

เมื่อเสร็จแล้วตรวจสอบให้แน่ใจว่าได้อัปเดตแล้วใน config / app_local.php ในวัตถุ Datasources

ตอนนี้เราจะดำเนินการตามรายละเอียดข้างต้นไปที่ฐานข้อมูล phpmyadmin หรือ mysql ของคุณและสร้างผู้ใช้ my_app ดังที่แสดงด้านล่าง -

ให้สิทธิพิเศษที่จำเป็นและบันทึกไว้ ตอนนี้เรามีรายละเอียดฐานข้อมูลตามการกำหนดค่าที่กล่าวถึงใน app_local.php เมื่อคุณตรวจสอบหน้าแรกของ CakePHP นี่คือสิ่งที่คุณควรได้รับ -

ตอนนี้เราจะสร้างตารางผู้ใช้ต่อไปนี้ในฐานข้อมูล

CREATE TABLE `users` ( 
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `username` varchar(50) NOT NULL, 
   `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1

แทรกบันทึก

ในการแทรกบันทึกในฐานข้อมูลอันดับแรกเราต้องใช้ตาราง TableRegistryชั้นเรียน. เราสามารถดึงอินสแตนซ์ออกจากรีจิสทรีโดยใช้get()วิธี. get() method จะใช้ชื่อของตารางฐานข้อมูลเป็นอาร์กิวเมนต์

อินสแตนซ์ใหม่นี้ใช้เพื่อสร้างเอนทิตีใหม่ กำหนดค่าที่จำเป็นด้วยอินสแตนซ์ของเอนทิตีใหม่ ตอนนี้เราต้องโทรไปที่ไฟล์save() วิธีการด้วย TableRegistry อินสแตนซ์ของคลาสซึ่งจะแทรกระเบียนใหม่ในฐานข้อมูล

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('/users/add', ['controller' => 'Users', 'action' => 'add']); $builder->fallbacks();
});

สร้างไฟล์ UsersController.php ไฟล์ที่ src/Controller/UsersController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/controller/UsersController.php

<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;
use Cake\Auth\DefaultPasswordHasher;
class UsersController extends AppController{
   public function add(){
      if($this->request->is('post')){ $username = $this->request->getData('username'); $hashPswdObj = new DefaultPasswordHasher;
         $password = $hashPswdObj->hash($this->request->getData('password')); $users_table = TableRegistry::get('users');
         $users = $users_table->newEntity($this->request->getData()); $users->username = $username; $users->password = $password; $this->set('users', $users); if($users_table->save($users))
         echo "User is added.";
      }
   }
}
?>

สร้างไดเร็กทอรี Users ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ add.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Users/add.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/users/add'));
   echo $this->Form->control('username'); echo $this->Form->control('password');
   echo $this->Form->button('Submit'); echo $this->Form->end();
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ http: // localhost / cakephp4 / ผู้ใช้ / เพิ่ม

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

ข้อมูลจะถูกบันทึกในตารางผู้ใช้ดังที่แสดงด้านล่าง -

ในการดูบันทึกของฐานข้อมูลอันดับแรกเราต้องยึดตารางโดยใช้ไฟล์ TableRegistryชั้นเรียน. เราสามารถดึงอินสแตนซ์ออกจากรีจิสทรีโดยใช้get()วิธี. get() method จะใช้ชื่อของตารางฐานข้อมูลเป็นอาร์กิวเมนต์

ตอนนี้อินสแตนซ์ใหม่นี้ใช้เพื่อค้นหาเรกคอร์ดจากฐานข้อมูลโดยใช้เมธอด find () วิธีนี้จะส่งคืนระเบียนทั้งหมดจากตารางที่ร้องขอ

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในรหัสต่อไปนี้

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('/users', ['controller' => 'Users', 'action' => 'index']); $builder->fallbacks();
});

สร้างไฟล์ UsersController.php ไฟล์ที่ src/Controller/UsersController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src / คอนโทรลเลอร์ / UsersController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\ORM\TableRegistry;
   use Cake\Datasource\ConnectionManager;
   class UsersController extends AppController{
      public function index(){
         $users = TableRegistry::get('users'); $query = $users->find(); $this->set('results',$query);
      }
   }
?>

สร้างไดเร็กทอรี Users ที่ src/Template, ละเว้นหากสร้างไว้แล้วและภายใต้ไดเร็กทอรีนั้นสร้างไฟล์ View เรียกว่าไฟล์ index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / ผู้ใช้ / index.ctp

<a href="add">Add User</a>
<table>
   <tr>
      <td>ID</td>
      <td>Username</td>
      <td>Password</td>
      <td>Edit</td>
      <td>Delete</td>
   </tr>
   <?php
      foreach ($results as $row): echo "<tr><td>".$row->id."</td>";
      echo "<td<".$row-<username."</td>"; echo "<td>".$row->password."</td>";
      echo "<td><a href='".$this-<Url->build(["controller" => "Users","action" => "edit",$row->id])."'>Edit</a></td>";
      echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "delete",$row->id])."'>Delete</a></td></tr>";
      endforeach;
   ?>
</table>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ http: // localhost / cakephp4 / users

เอาต์พุต

เมื่อดำเนินการ URL ด้านบนจะให้ผลลัพธ์ต่อไปนี้แก่คุณ

ในการอัปเดตระเบียนในฐานข้อมูลอันดับแรกเราต้องใช้ตาราง TableRegistryชั้นเรียน. เราสามารถดึงอินสแตนซ์ออกจากรีจิสทรีโดยใช้ไฟล์get()วิธี. get()method จะใช้ชื่อของตารางฐานข้อมูลเป็นอาร์กิวเมนต์ ตอนนี้อินสแตนซ์ใหม่นี้ใช้เพื่อรับบันทึกเฉพาะที่เราต้องการอัปเดต

โทร get()วิธีการกับอินสแตนซ์ใหม่นี้และส่งคีย์หลักเพื่อค้นหาเรกคอร์ดซึ่งจะถูกบันทึกในอินสแตนซ์อื่น ใช้อินสแตนซ์นี้เพื่อตั้งค่าใหม่ที่คุณต้องการอัปเดตจากนั้นเรียกไฟล์save() วิธีการด้วย TableRegistry อินสแตนซ์ของคลาสเพื่ออัปเดตบันทึก

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังแสดงในโค้ดต่อไปนี้

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('/users/edit', ['controller' => 'Users', 'action' => 'edit']); $builder->fallbacks();
});

สร้างไฟล์ UsersController.php ไฟล์ที่ src/Controller/UsersController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src / คอนโทรลเลอร์ / UsersController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\ORM\TableRegistry;
   use Cake\Datasource\ConnectionManager;
   class UsersController extends AppController{
      public function index(){
         $users = TableRegistry::get('users'); $query = $users->find(); $this->set('results',$query); } public function edit($id){
         if($this->request->is('post')){ $username = $this->request->getData('username'); $password = $this->request->getData('password'); $users_table = TableRegistry::get('users');
            $users = $users_table->get($id); $users->username = $username; $users->password = $password; if($users_table->save($users)) echo "User is udpated"; $this->setAction('index');
         } else {
            $users_table = TableRegistry::get('users')->find(); $users = $users_table->where(['id'=>$id])->first();
            $this->set('username',$users->username);
            $this->set('password',$users->password);
            $this->set('id',$id);
         }
      }
   }
?>

สร้างไดเร็กทอรี Users at src/Template, ละเว้นหากสร้างไว้แล้วและภายใต้ไดเร็กทอรีนั้นสร้างมุมมองที่เรียกว่า index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / ผู้ใช้ / index.php

<a href="add">Add User</a>
<table>
   <tr>
   <td>ID</td>
   <td>Username</td>
   <td>Password</td>
   <td>Edit</td>
   <td>Delete</td>
   </tr>
   <?php
      foreach ($results as $row):
      echo "<tr><td>".$row->id."</td>"; echo "<td>".$row->username."</td>";
      echo "<td>".$row->password."</td>"; echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "edit",$row->id])."'>Edit</a></td>"; echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "delete",$row->id])."'>Delete</a></td></tr>";
      endforeach;
   ?>
</table>

สร้างใหม่ View ไฟล์ภายใต้ไดเร็กทอรี Users ที่เรียกว่า edit.php และคัดลอกรหัสต่อไปนี้ในนั้น

src / แม่แบบ / ผู้ใช้ / edit.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/users/edit/'.$id)); echo $this->Form->control('username',['value'=>$username]); echo $this->Form->control('password',['value'=>$password]); echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้และคลิกที่ Edit link เพื่อแก้ไขบันทึก

http: // localhost / cakephp4 / ผู้ใช้

เอาต์พุต

หลังจากเข้าไปที่ URL ด้านบนแล้วจะแสดงระเบียนในตารางผู้ใช้ดังที่แสดงด้านล่าง -

คลิกที่ปุ่มแก้ไขและจะแสดงหน้าจอต่อไปนี้ -

ตอนนี้เราจะอัปเดตชื่อ Virat เป็น Virat123 และส่งรายละเอียด หน้าจอถัดไปที่แสดงจะเป็นดังนี้ -

ในการลบบันทึกในฐานข้อมูลอันดับแรกเราต้องยึดตารางโดยใช้ไฟล์ TableRegistryชั้นเรียน. เราสามารถดึงอินสแตนซ์ออกจากรีจิสทรีโดยใช้ไฟล์get()วิธี. เมธอด get () จะใช้ชื่อของตารางฐานข้อมูลเป็นอาร์กิวเมนต์ ตอนนี้อินสแตนซ์ใหม่นี้ใช้เพื่อรับบันทึกเฉพาะที่เราต้องการลบ

โทร get()วิธีการกับอินสแตนซ์ใหม่นี้และส่งคีย์หลักเพื่อค้นหาเรกคอร์ดซึ่งจะถูกบันทึกในอินสแตนซ์อื่น ใช้อินสแตนซ์ของคลาส TableRegistry เพื่อเรียกไฟล์delete วิธีการลบบันทึกจากฐานข้อมูล

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังแสดงในโค้ดต่อไปนี้

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('/users/delete', ['controller' => 'Users', 'action' => 'delete']);
   $builder->fallbacks();
});

สร้างไฟล์ UsersController.php ไฟล์ที่ src/Controller/UsersController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src / คอนโทรลเลอร์ / UsersController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\ORM\TableRegistry;
   use Cake\Datasource\ConnectionManager;
   class UsersController extends AppController{
      public function index(){
         $users = TableRegistry::get('users');
         $query = $users->find();
         $this->set('results',$query);
      }
      public function delete($id){ $users_table = TableRegistry::get('users');
         $users = $users_table->get($id); $users_table->delete($users); echo "User deleted successfully."; $this->setAction('index');
      }
   }
?>

เพียงแค่สร้างที่ว่างเปล่า View ไฟล์ภายใต้ Users ไดเรกทอรีที่เรียกว่า delete.ctp.

src / แม่แบบ / ผู้ใช้ / delete.ctp

สร้างไดเร็กทอรี Users ที่ src/Template, ละเว้นหากสร้างไว้แล้วและภายใต้ไดเร็กทอรีนั้นสร้างไฟล์ Viewเรียกว่าไฟล์ index.ctp. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / ผู้ใช้ / index.ctp

<a href="add">Add User</a>
<table>
   <tr>
   <td>ID</td>
   <td>Username</td>
   <td>Password</td>
   <td>Edit</td>
   <td>Delete</td>
   </tr>
   <?php
      foreach ($results as $row):
      echo "<tr><td>".$row->id."</td>"; echo "<td>".$row->username."</td>";
      echo "<td>".$row->password."</td>"; echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "edit",$row->id])."'>Edit</a></td>"; echo "<td><a href='".$this->Url->build(["controller" => "Users","action" => "delete",$row->id])."'>Delete</a></td></tr>";
      endforeach;
   ?>
</table>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้และคลิกที่ Delete link เพื่อลบบันทึก

http: // localhost: 85 / CakePHP / ผู้ใช้

เอาต์พุต

หลังจากเข้าไปที่ URL ด้านบนและคลิกที่ลิงค์ Delete คุณจะได้รับผลลัพธ์ต่อไปนี้ซึ่งคุณสามารถลบบันทึกได้

คลิกที่ลิงค์ลบเพื่อลบบันทึก

บทนี้เกี่ยวข้องกับข้อมูลเกี่ยวกับกระบวนการตรวจสอบสิทธิ์ที่มีอยู่ใน CakePHP

การรับรองความถูกต้อง

การพิสูจน์ตัวตนเป็นกระบวนการในการระบุผู้ใช้ที่ถูกต้อง CakePHP รองรับการตรวจสอบสิทธิ์สามประเภท

  • FormAuthenticate- ช่วยให้คุณสามารถรับรองความถูกต้องของผู้ใช้ตามรูปแบบข้อมูล POST โดยปกติแล้วนี่คือแบบฟอร์มการเข้าสู่ระบบที่ผู้ใช้ป้อนข้อมูลลงใน นี่คือวิธีการรับรองความถูกต้องเริ่มต้น

  • BasicAuthenticate - ช่วยให้คุณสามารถตรวจสอบผู้ใช้โดยใช้การตรวจสอบสิทธิ์ HTTP พื้นฐาน

  • DigestAuthenticate - ช่วยให้คุณสามารถตรวจสอบผู้ใช้โดยใช้การตรวจสอบความถูกต้องของ Digest HTTP

ตัวอย่างสำหรับ FormAuthentication

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังแสดงในโค้ดต่อไปนี้

config/routes.php

<?php
use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
Router::defaultRouteClass('DashedRoute');
Router::scope('/', function (RouteBuilder $routes) {
   $routes->connect('/auth',['controller'=>'Authexs','action'=>'index']); $routes->connect('/login',['controller'=>'Authexs','action'=>'login']);
   $routes->connect('/logout',['controller'=>'Authexs','action'=>'logout']); $routes->fallbacks('DashedRoute');
});
Plugin::routes();

เปลี่ยนรหัสของไฟล์ AppController.php ดังแสดงในโปรแกรมต่อไปนี้

src/Controller/AppController.php

<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
use Cake\Controller\Component\AuthComponent;
class AppController extends Controller {
   public function initialize() {
      parent::initialize();
      $this->loadComponent('RequestHandler'); $this->loadComponent('Flash');
         $this->loadComponent('Auth', [ 'authenticate' => [ 'Form' => [ 'fields' => [ 'username' => 'username', 'password' => 'password' ] ] ], 'loginAction' => [ 'controller' => 'Authexs', 'action' => 'login' ], 'loginRedirect' => [ 'controller' => 'Authexs', 'action' => 'index' ], 'logoutRedirect' => [ 'controller' => 'Authexs', 'action' => 'login' ] ]); } public function beforeFilter(Event $event) {
      $this->Auth->allow(['index','view']); $this->set('loggedIn', $this->Auth->user());
   }
}

สร้าง AuthexsController.php ไฟล์ที่ src/Controller/AuthexsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/AuthexsController.php

<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;
use Cake\Event\Event;
use Cake\Auth\DefaultPasswordHasher;
class AuthexsController extends AppController {
   var $components = array('Auth');
   public function index(){
   }
   public function login(){
      if($this->request->is('post')) { $user = $this->Auth->identify(); if($user){
            $this->Auth->setUser($user);
            return $this->redirect($this->Auth->redirectUrl());
         } else
         $this->Flash->error('Your username or password is incorrect.'); } } public function logout(){ return $this->redirect($this->Auth->logout());
   } 
}
?>

สร้างไดเร็กทอรี Authexs ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View เรียกว่าไฟล์ login.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Authexs/login.php

<?php
   echo $this->Form->create();
   echo $this->Form->control('username'); echo $this->Form->control('password');
   echo $this->Form->button('Submit'); echo $this->Form->end();
?>

สร้างใหม่ View เรียกว่าไฟล์ logout.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Authexs/logout.php

You are successfully logged out.

สร้างใหม่ View เรียกว่าไฟล์ index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Authexs/index.php

You are successfully logged in. 
<?php 
   echo $this->Html->link('logout',[
      "controller" => "Authexs","action" => "logout"
   ]); 
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้

http: // localhost / cakephp4 / auth

เอาต์พุต

เนื่องจากการตรวจสอบความถูกต้องได้ถูกนำไปใช้และเมื่อคุณพยายามไปที่ URL ข้างต้นคุณจะถูกนำไปยังหน้าเข้าสู่ระบบดังที่แสดงด้านล่าง

หลังจากให้ข้อมูลรับรองที่ถูกต้องคุณจะเข้าสู่ระบบและเปลี่ยนเส้นทางไปยังหน้าจอดังที่แสดงด้านล่าง

หลังจากคลิกที่ไฟล์ logout คุณจะถูกนำไปที่หน้าจอเข้าสู่ระบบอีกครั้ง

ความล้มเหลวของระบบต้องได้รับการจัดการอย่างมีประสิทธิภาพเพื่อให้ระบบทำงานได้อย่างราบรื่น CakePHP มาพร้อมกับการดักข้อผิดพลาดเริ่มต้นซึ่งจะพิมพ์และบันทึกข้อผิดพลาดเมื่อเกิดขึ้น ตัวจัดการข้อผิดพลาดเดียวกันนี้ถูกใช้เพื่อตรวจจับExceptions.

ตัวจัดการข้อผิดพลาดแสดงข้อผิดพลาดเมื่อการดีบักเป็นจริงและบันทึกข้อผิดพลาดเมื่อการดีบักเป็นเท็จ CakePHP มีคลาสข้อยกเว้นจำนวนหนึ่งและการจัดการข้อยกเว้นในตัวจะจับข้อยกเว้นที่ไม่ถูกจับและแสดงหน้าเว็บที่มีประโยชน์

ข้อผิดพลาดและการกำหนดค่าข้อยกเว้น

ข้อผิดพลาดและข้อยกเว้นสามารถกำหนดค่าในไฟล์ได้ config\app.php. การจัดการข้อผิดพลาดยอมรับตัวเลือกบางอย่างที่อนุญาตให้คุณปรับแต่งการจัดการข้อผิดพลาดสำหรับแอปพลิเคชันของคุณ -

ตัวเลือก ประเภทข้อมูล คำอธิบาย
errorLevel int

ระดับข้อผิดพลาดที่คุณสนใจในการจับภาพ ใช้ค่าคงที่ข้อผิดพลาด php ในตัวและ bitmasks เพื่อเลือกระดับข้อผิดพลาดที่คุณสนใจ

ติดตาม บูล

รวมสแต็กเทรซสำหรับข้อผิดพลาดในล็อกไฟล์ สแต็กเทรซจะรวมอยู่ในบันทึกหลังจากแต่ละข้อผิดพลาด สิ่งนี้มีประโยชน์สำหรับการค้นหาว่าเกิดข้อผิดพลาดที่ไหน / เมื่อใด

ข้อยกเว้น สตริง

ชั้นเรียนที่รับผิดชอบในการแสดงข้อยกเว้นที่ไม่ถูกจับ หากคุณเลือกไฟล์custom คุณควรวางไฟล์สำหรับคลาสนั้นไว้ใน src/Error. คลาสนี้จำเป็นต้องใช้ไฟล์render() วิธี.

บันทึก บูล

เมื่อเป็นจริงจะมีการบันทึกข้อยกเว้น + สแต็กเทรซ Cake\Log\Log.

skipLog อาร์เรย์

อาร์เรย์ของชื่อคลาสข้อยกเว้นที่ไม่ควรบันทึก สิ่งนี้มีประโยชน์ในการลบNotFoundExceptions หรือข้อความบันทึกทั่วไป แต่ไม่น่าสนใจอื่น ๆ

extraFatalErrorMemory int

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

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในรหัสต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('/exception/:arg1/:arg2',
      ['controller'=>'Exps','action'=>'index'],
      ['pass' => ['arg1', 'arg2']]);
   $builder->fallbacks();
});

สร้าง ExpsController.php ไฟล์ที่ src/Controller/ExpsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/ExpsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Core\Exception\Exception;
   class ExpsController extends AppController {
      public function index($arg1,$arg2) { try{ $this->set('argument1',$arg1); $this->set('argument2',$arg2); if(($arg1 > 1 || $arg1 > 10) || ($arg2 < 1 || $arg2 > 10)) throw new Exception("One of the number is out of range [1-10]."); } catch(\Exception $ex){
            echo $ex->getMessage();
         }
      }
   }
?>

สร้างไดเร็กทอรี Exps ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ index.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Exps/index.php

This is CakePHP tutorial and this is an example of Passed arguments.
Argument-1: <?=$argument1?><br/> Argument-2: <?=$argument2?><br/>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้

http: // localhost / cakephp4 / ข้อยกเว้น / 5/0

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

การเข้าสู่ CakePHP เป็นเรื่องง่ายมาก คุณต้องใช้ฟังก์ชันเดียว คุณสามารถบันทึกข้อผิดพลาดข้อยกเว้นกิจกรรมของผู้ใช้การดำเนินการของผู้ใช้สำหรับกระบวนการเบื้องหลังเช่น cronjob การบันทึกข้อมูลใน CakePHP เป็นเรื่องง่าย ฟังก์ชัน log () มีให้โดย LogTrait ซึ่งเป็นบรรพบุรุษร่วมสำหรับคลาส CakePHP เกือบทั้งหมด

การกำหนดค่าการบันทึก

เราสามารถกำหนดค่าล็อกอินไฟล์ config/app.php. มีส่วนบันทึกในไฟล์ซึ่งคุณสามารถกำหนดค่าตัวเลือกการบันทึกดังที่แสดงในภาพหน้าจอต่อไปนี้

ตามค่าเริ่มต้นคุณจะเห็นบันทึกสองระดับ - error และ debugกำหนดค่าสำหรับคุณแล้ว แต่ละคนจะจัดการข้อความในระดับที่แตกต่างกัน

CakePHP รองรับระดับการบันทึกต่างๆดังที่แสดงด้านล่าง -

  • Emergency - ระบบใช้งานไม่ได้

  • Alert - ต้องดำเนินการทันที

  • Critical - เงื่อนไขวิกฤต

  • Error - เงื่อนไขข้อผิดพลาด

  • Warning - เงื่อนไขการเตือน

  • Notice - สภาพปกติ แต่มีนัยสำคัญ

  • Info - ข้อความให้ข้อมูล

  • Debug - ข้อความระดับดีบัก

กำลังเขียนไฟล์บันทึก

มีสองวิธีที่เราสามารถเขียนลงในไฟล์บันทึก

ประการแรกคือการใช้แบบคงที่ write()วิธี. ต่อไปนี้เป็นไวยากรณ์ของแบบคงที่write() วิธี.

ไวยากรณ์ เขียน (จำนวนเต็ม | สตริง$ ระดับผสม$ ข้อความสตริง | อาร์เรย์$ บริบท [])
พารามิเตอร์

ระดับความรุนแรงของข้อความที่กำลังเขียน ค่าต้องเป็นจำนวนเต็มหรือสตริงที่ตรงกับระดับที่ทราบ

เนื้อหาข้อความที่จะบันทึก

ข้อมูลเพิ่มเติมที่จะใช้ในการบันทึกข้อความ สามารถส่งผ่านคีย์ขอบเขตพิเศษเพื่อใช้สำหรับการกรองล็อกเอ็นจินที่จะใช้ต่อไป ถ้าสตริงหรืออาร์เรย์ดัชนีตัวเลขถูกส่งผ่านไปจะถือว่าเป็นคีย์ขอบเขต ดูCake\Log\Log::config() สำหรับข้อมูลเพิ่มเติมเกี่ยวกับขอบเขตการบันทึก

ผลตอบแทน

บูลีน

คำอธิบาย

เขียนข้อความที่กำหนดและพิมพ์ไปยังล็อกอะแด็ปเตอร์ที่กำหนดค่าไว้ทั้งหมด อะแด็ปเตอร์ที่กำหนดค่าจะถูกส่งผ่านทั้ง$level and $ตัวแปรข้อความ $ level คือหนึ่งในสตริง / ค่าต่อไปนี้

ประการที่สองคือการใช้ไฟล์ log() shortcut ฟังก์ชั่นที่มีให้โดยใช้ไฟล์ LogTrait บันทึกการโทร () จะโทรภายใน Log::write() -

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   //$builder->connect('/pages', ['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('logex',['controller'=>'Logexs','action'=>'index']);
   $builder->fallbacks();
});

สร้างไฟล์ LogexsController.php ไฟล์ที่ src/Controller/LogexsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/LogexsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Log\Log;
   class LogexsController extends AppController{
      public function index(){
         /*The first way to write to log file.*/
         Log::write('debug',"Something didn't work.");
         /*The second way to write to log file.*/
         $this->log("Something didn't work.",'debug');
      }
   }
?>

สร้างไดเร็กทอรี Logexs ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ index.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Logexs/index.php

Something is written in log file. Check log file logs\debug.log

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้

http: // localhost / cakephp4 / logex

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

บันทึกจะถูกเพิ่มลงในไฟล์ log / debug.log -

CakePHP มีแท็กต่างๆในตัวเพื่อจัดการกับรูปแบบ HTML ได้อย่างง่ายดายและปลอดภัย เช่นเดียวกับเฟรมเวิร์ก PHP อื่น ๆ องค์ประกอบหลักของ HTML ก็ถูกสร้างขึ้นโดยใช้ CakePHP ต่อไปนี้เป็นฟังก์ชันต่างๆที่ใช้ในการสร้างองค์ประกอบ HTML

ใช้ฟังก์ชันต่อไปนี้เพื่อ generate select options -

ไวยากรณ์ _selectOptions (อาร์เรย์$ elementarray ( )อาร์เรย์$ parentarray ()บูลีน$ showParentsnullอาร์เรย์$ attributesarray () )
พารามิเตอร์
  • องค์ประกอบที่จะจัดรูปแบบ

  • ผู้ปกครองสำหรับ OPTGROUP

  • ไม่ว่าจะแสดงผู้ปกครอง

  • แอตทริบิวต์ HTML

ผลตอบแทน อาร์เรย์
คำอธิบาย ส่งคืนอาร์เรย์ขององค์ประกอบ OPTION / OPTGROUP ที่จัดรูปแบบ

ใช้ฟังก์ชันต่อไปนี้ to generate HTML select element.

ไวยากรณ์ เลือก (สตริง $fieldName, array $อาร์เรย์ตัวเลือก () อาร์เรย์ $ แอตทริบิวต์อาร์เรย์ ())
พารามิเตอร์

แอตทริบิวต์ชื่อของ SELECT

อาร์เรย์ขององค์ประกอบ OPTION (เป็นคู่ 'value' => 'ข้อความ') ที่จะใช้ในองค์ประกอบ SELECT

ผลตอบแทน จัดรูปแบบองค์ประกอบ SELECT
คำอธิบาย ส่งคืนองค์ประกอบ SELECT ที่จัดรูปแบบ

ใช้ฟังก์ชันต่อไปนี้ to generate button ในหน้า HTML

ไวยากรณ์

ปุ่ม (string $ title, array $ optionsarray ())

พารามิเตอร์
  • คำบรรยายของปุ่ม ไม่เข้ารหัส HTML โดยอัตโนมัติ

  • อาร์เรย์ของตัวเลือกและแอตทริบิวต์ HTML

ผลตอบแทน แท็กปุ่ม HTML
คำอธิบาย

สร้างไฟล์ <button>แท็ก แอตทริบิวต์ type มีค่าเริ่มต้นเป็นtype="submit". คุณสามารถเปลี่ยนเป็นค่าอื่นได้โดยใช้$options['type'].

ใช้ฟังก์ชันต่อไปนี้ to generate checkbox ในหน้า HTML

ไวยากรณ์ ช่องทำเครื่องหมาย (สตริง $fieldName, array $ตัวเลือก ())
พารามิเตอร์
  • ชื่อฟิลด์เช่น "Modelname.fieldname"

  • อาร์เรย์ของแอตทริบิวต์ HTML ตัวเลือกที่เป็นไปได้คือค่า, การตรวจสอบ, hiddenField, disabled, default

ผลตอบแทน องค์ประกอบการป้อนข้อความ HTML
คำอธิบาย สร้างวิดเจ็ตอินพุตช่องทำเครื่องหมาย

ใช้ฟังก์ชันต่อไปนี้ to create form ในหน้า HTML

ไวยากรณ์ สร้าง (ผสม$ modelnullอาร์เรย์$ optionarray () )
พารามิเตอร์
  • ชื่อโมเดลที่กำลังกำหนดฟอร์ม ควรมีชื่อปลั๊กอินสำหรับรุ่นปลั๊กอิน เช่น ContactManager.Contact. ถ้าอาร์เรย์ถูกส่งผ่านและอาร์กิวเมนต์ $ option ว่างอาร์เรย์จะถูกใช้เป็นตัวเลือก หากเป็นเท็จจะไม่มีการใช้โมเดล

  • อาร์เรย์ของแอตทริบิวต์และตัวเลือก html ตัวเลือกที่เป็นไปได้ ได้แก่ type, action, url, default, onsubmit, inputDefaults, encoding

ผลตอบแทน

แท็ก FORM ที่จัดรูปแบบแล้ว

คำอธิบาย ส่งกลับองค์ประกอบ HTML FORM

ใช้ฟังก์ชันต่อไปนี้เพื่อ provide file uploading functionality ในหน้า HTML

ไวยากรณ์

ไฟล์ (สตริง $ fieldName อาร์เรย์ $ optionsarray ())

พารามิเตอร์
  • ชื่อของฟิลด์ในรูปแบบ "Modelname.fieldname"

  • อาร์เรย์ของแอตทริบิวต์ HTML

ผลตอบแทน

อินพุตไฟล์ที่สร้างขึ้น

คำอธิบาย

สร้างวิดเจ็ตอินพุตไฟล์

ฟังก์ชันต่อไปนี้ใช้ในการสร้าง hidden element ในหน้า HTML

ไวยากรณ์

ซ่อน (สตริง$ fieldNameอาร์เรย์$ optionsarray () )

พารามิเตอร์
  • ชื่อของฟิลด์ในรูปแบบ "Modelname.fieldname"

  • อาร์เรย์ของแอตทริบิวต์ HTML

ผลตอบแทน

อินพุตที่ซ่อนอยู่ที่สร้างขึ้น

คำอธิบาย

สร้างช่องป้อนข้อมูลที่ซ่อนอยู่

ฟังก์ชันต่อไปนี้ใช้ในการสร้าง input element ในหน้า HTML

ไวยากรณ์

อินพุต (สตริง $ fieldName อาร์เรย์ $ ตัวเลือกอาร์เรย์ ())

พารามิเตอร์
  • ควรเป็น "Modelname.fieldname"

  • อินพุตแต่ละประเภทใช้ตัวเลือกที่แตกต่างกัน

ผลตอบแทน

วิดเจ็ตฟอร์มที่เสร็จสมบูรณ์

คำอธิบาย

สร้างองค์ประกอบการป้อนแบบฟอร์มพร้อมด้วย label และ wrapper div

ฟังก์ชันต่อไปนี้ใช้ในการสร้าง radio button ในหน้า HTML

ไวยากรณ์

วิทยุ (สตริง$ fieldNameอาร์เรย์$ optionsarray ()อาร์เรย์$ attributesarray () )

พารามิเตอร์
  • ชื่อฟิลด์เช่น "Modelname.fieldname"

  • อาร์เรย์ตัวเลือกปุ่มตัวเลือก

  • อาร์เรย์ของแอตทริบิวต์ HTML และคุณลักษณะพิเศษด้านบน

ผลตอบแทน ตั้งค่าวิดเจ็ตวิทยุเสร็จสมบูรณ์
คำอธิบาย สร้างชุดวิดเจ็ตวิทยุ จะสร้างตำนานและชุดฟิลด์ตามค่าเริ่มต้น ใช้ตัวเลือก $ เพื่อควบคุมสิ่งนี้

ฟังก์ชันต่อไปนี้ใช้ในการสร้าง submit บนหน้า HTML

ไวยากรณ์ ส่ง (string $ caption null อาร์เรย์ $ options array ())
พารามิเตอร์
  • ป้ายกำกับที่ปรากฏบนปุ่มหรือหากสตริงมี: // หรือนามสกุล. jpg, .jpe, .jpeg, .gif, .png ใช้รูปภาพหากมีส่วนขยายอยู่และอักขระตัวแรกคือ / รูปภาพจะสัมพันธ์กับ webroot หรือหากอักขระตัวแรกไม่ใช่ / รูปภาพจะสัมพันธ์กับ webroot / img

  • อาร์เรย์ของตัวเลือก ตัวเลือกที่เป็นไปได้คือ div, before, after, type เป็นต้น

ผลตอบแทน

ปุ่มส่ง HTML

คำอธิบาย สร้างองค์ประกอบปุ่มส่ง วิธีนี้จะสร้างองค์ประกอบ <input /> ที่สามารถใช้ในการส่งและรีเซ็ตแบบฟอร์มโดยใช้ตัวเลือก $ การส่งภาพสามารถสร้างได้โดยการจัดหาเส้นทางภาพสำหรับ $ caption

ใช้ฟังก์ชันต่อไปนี้ to generate textarea element ในหน้า HTML

ไวยากรณ์

Textarea (สตริง $ fieldName อาร์เรย์ $ ตัวเลือกอาร์เรย์ ())

พารามิเตอร์
  • ชื่อของฟิลด์ในรูปแบบ "Modelname.fieldname"

  • อาร์เรย์ของแอตทริบิวต์ HTML ตัวเลือกพิเศษเช่น Escape

ผลตอบแทน องค์ประกอบการป้อนข้อความ HTML ที่สร้างขึ้น
คำอธิบาย สร้างวิดเจ็ต textarea

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในรหัสต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('register',['controller'=>'Registrations','action'=>'index']);
   $builder->fallbacks();
});

สร้างไฟล์ RegistrationsController.php ไฟล์ที่

src/Controller/RegistrationsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/RegistrationsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class RegistrationsController extends AppController{
      public function index(){
         $country = array('India','United State of America','United Kingdom');
         $this->set('country',$country);
         $gender = array('Male','Female'); $this->set('gender',$gender);
      }
   }
?>

สร้างไดเร็กทอรี Registrations ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View เรียกว่าไฟล์ index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Registrations/index.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/register'));
   echo '<label for="country">Country</label>';
   echo $this->Form->select('country',$country);
   echo '<label for="gender">Gender</label>';
   echo $this->Form->radio('gender ',$gender);
   echo '<label for="address">Address</label>';
   echo $this->Form->textarea('address'); echo $this->Form->file('profilepic');
   echo '<div>'.$this->Form->checkbox('terms'). '<label for="country">Terms ∓ Conditions</label></div>'; echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ -

http: // localhost / cakephp4 / register

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

เช่นเดียวกับเฟรมเวิร์กอื่น ๆ CakePHP ยังสนับสนุน Internationalization เราจำเป็นต้องทำตามขั้นตอนเหล่านี้เพื่อเปลี่ยนจากภาษาเดียวเป็นหลายภาษา

ขั้นตอนที่ 1

สร้างทรัพยากรไดเร็กทอรีโลแคลแยกต่างหาก \locales.

ขั้นตอนที่ 2

สร้างไดเร็กทอรีย่อยสำหรับแต่ละภาษาภายใต้ไดเร็กทอรี src \ Locale ชื่อของไดเร็กทอรีย่อยสามารถเป็นรหัส ISO สองตัวอักษรของภาษาหรือชื่อโลแคลแบบเต็มเช่น en_US, fr_FR เป็นต้น

ขั้นตอนที่ 3

สร้างแยกต่างหาก default.poไฟล์ภายใต้ไดเร็กทอรีย่อยของแต่ละภาษา ไฟล์นี้มีรายการในรูปแบบmsgid และ msgstrดังแสดงในโปรแกรมต่อไปนี้

msgid "msg"
msgstr "CakePHP Internationalization example."

ที่นี่ msgid เป็นคีย์ที่จะใช้ในไฟล์ดูเทมเพลตและ msgstr คือค่าที่เก็บการแปล

ขั้นตอนที่ 4

ในไฟล์ดูเทมเพลตเราสามารถใช้ข้อมูลข้างต้น msgidดังที่แสดงด้านล่างซึ่งจะถูกแปลตามค่าที่ตั้งของโลแคล

<?php echo __('msg'); ?>

สามารถตั้งค่าภาษาเริ่มต้นในไฟล์ config/app.php ไฟล์ตามบรรทัดต่อไปนี้

'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US')

ในการเปลี่ยนโลคัลขณะรันไทม์เราสามารถใช้บรรทัดต่อไปนี้

use Cake\I18n\I18n;
I18n::locale('de_DE');

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   //$builder->connect('/pages', ['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('locale',
      ['controller'=>'Localizations','action'=>'index']);
   $builder->fallbacks();
});

สร้างไฟล์ LocalizationsController.php ไฟล์ที่ src/Controller/LocalizationsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/LocalizationsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\I18n\I18n;
   class LocalizationsController extends AppController {
      public function index() {
         if($this->request->is('post')) {
            $locale = $this->request->getData('locale');
            I18n::setLocale($locale);
         }
      }
   }
?>

สร้างไฟล์ locales ไดเรกทอรีที่ทรัพยากร \locales. สร้าง 3 ไดเรกทอรีที่เรียกว่าen_US, fr_FR, de_DEภายใต้ไดเร็กทอรีโลแคล สร้างไฟล์ภายใต้แต่ละไดเร็กทอรีที่เรียกว่าdefault.po. คัดลอกรหัสต่อไปนี้ในไฟล์ที่เกี่ยวข้อง

resources/locales/en_US/default.po

msgid "msg"
msgstr "CakePHP Internationalization example."

resources/locales/fr_FR/default.po

msgid "msg"
msgstr "Exemple CakePHP internationalisation."

resources/locales/de_DE/default.po

msgid "msg"
msgstr "CakePHP Internationalisierung Beispiel."

สร้างไดเร็กทอรี Localizations ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View เรียกว่าไฟล์ index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Localizations/index.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/locale'));
   echo $this->Form->radio("locale", [ ['value'=>'en_US','text'=>'English'], ['value'=>'de_DE','text'=>'German'], ['value'=>'fr_FR','text'=>'French'], ] ); echo $this->Form->button('Change Language');
   echo $this->Form->end();
?>
<?php echo __('msg'); ?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ http: // localhost / cakephp4 / ภาษา

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

อีเมล์

CakePHP มีคลาสอีเมลเพื่อจัดการฟังก์ชันที่เกี่ยวข้องกับอีเมล ในการใช้ฟังก์ชันอีเมลในคอนโทรลเลอร์ใด ๆ เราต้องโหลดคลาสอีเมลก่อนโดยเขียนบรรทัดต่อไปนี้

use Cake\Mailer\Email;

คลาสอีเมลมีวิธีการที่เป็นประโยชน์ต่างๆซึ่งอธิบายไว้ด้านล่าง

ไวยากรณ์

จาก (string | array | null $ email null, string | null $ name null)

พารามิเตอร์
  • สตริงกับอีเมล

  • Name

ผลตอบแทน

อาร์เรย์ | $ this

คำอธิบาย

ระบุว่าจากที่อยู่อีเมลใด อีเมลจะถูกส่งไป

ไวยากรณ์

ถึง (string | array | null $ email null, string | null $ name null)

พารามิเตอร์
  • สตริงกับอีเมล

  • Name

ผลตอบแทน

อาร์เรย์ | $ this

คำอธิบาย

ระบุว่าอีเมลจะส่งถึงใคร

ไวยากรณ์

ส่ง (string | array | null $ content null)

พารามิเตอร์
  • สตริงที่มีข้อความหรืออาร์เรย์พร้อมข้อความ

ผลตอบแทน อาร์เรย์
คำอธิบาย

ส่งอีเมลโดยใช้เนื้อหาเทมเพลตและเค้าโครงที่ระบุ

ไวยากรณ์

หัวเรื่อง (สตริง | null $ subject null)

พารามิเตอร์
  • สตริงหัวเรื่อง

ผลตอบแทน

อาร์เรย์ | $ this

คำอธิบาย

รับ / ตั้งหัวเรื่อง

ไวยากรณ์

ไฟล์แนบ (string | array | null $ attachment snull)

พารามิเตอร์
  • สตริงที่มีชื่อไฟล์หรืออาร์เรย์ที่มีชื่อไฟล์

ผลตอบแทน

อาร์เรย์ | $ this

คำอธิบาย

เพิ่มไฟล์แนบในข้อความอีเมล

ไวยากรณ์

สำเนาลับ (สตริง | อาร์เรย์ | null $ email null, string | null $ name null)

พารามิเตอร์
  • สตริงกับอีเมล

  • Name

ผลตอบแทน

อาร์เรย์ | $ this

คำอธิบาย

สำเนาลับ

ไวยากรณ์

cc (string | array | null $ email null, string | null $ name null)

พารามิเตอร์
  • สตริงกับอีเมล

  • Name

ผลตอบแทน

อาร์เรย์ | $ this

คำอธิบาย

ซีซี

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('/email',['controller'=>'Emails','action'=>'index']); $builder->fallbacks();
});

สร้างไฟล์ EmailsController.php ไฟล์ที่ src/Controller/EmailsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/EmailsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Mailer\Email;
   class EmailsController extends AppController{
      public function index(){
         $email = new Email('default'); $email->to('[email protected]')
            ->subject('About')
            ->send('My message');
      }
   }
?>

สร้างไดเร็กทอรี Emails ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View ชื่อ index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Emails/index.php

Email Sent.

ก่อนที่เราจะส่งอีเมลใด ๆ เราจำเป็นต้องกำหนดค่าก่อน ในภาพหน้าจอด้านล่างคุณจะเห็นว่ามีการขนส่งสองแบบคือค่าเริ่มต้นและ Gmail เราได้ใช้การขนส่งของ Gmail

คุณต้องแทนที่“ GMAIL USERNAME” ด้วยชื่อผู้ใช้ Gmail และ“ รหัสผ่านแอป” ด้วยรหัสผ่านแอปพลิเคชันของคุณ คุณต้องเปิดการยืนยันแบบ 2 ขั้นตอนใน Gmail และสร้างรหัสผ่านใหม่ของแอปเพื่อส่งอีเมล

config/app.php

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ - http: // localhost / cakephp / email

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

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

การเข้าถึงวัตถุเซสชัน

สามารถสร้างวัตถุเซสชันได้โดยเรียกใช้รหัสต่อไปนี้

$session = $this->request->session();

การเขียนข้อมูลเซสชัน

ในการเขียนบางสิ่งในเซสชันเราสามารถใช้ไฟล์ write() session วิธี.

Session::write($key, $value)

วิธีการข้างต้นจะใช้อาร์กิวเมนต์สองข้อคือ value และ key ภายใต้ซึ่งค่าจะถูกเก็บไว้

ตัวอย่าง

$session->write('name', 'Virat Gandhi');

การอ่านข้อมูลเซสชัน

ในการดึงข้อมูลที่เก็บไว้จากเซสชันเราสามารถใช้ไฟล์ read() session วิธี.

Session::read($key)

ฟังก์ชันข้างต้นจะใช้อาร์กิวเมนต์เดียวเท่านั้นนั่นคือ the key of the value,ซึ่งใช้ในขณะเขียนข้อมูลเซสชัน เมื่อระบุคีย์ที่ถูกต้องแล้วฟังก์ชันจะคืนค่า

ตัวอย่าง

$session->read('name');

เมื่อคุณต้องการตรวจสอบว่ามีข้อมูลเฉพาะในเซสชันหรือไม่คุณสามารถใช้ไฟล์ check() session วิธี.

Session::check($key)

ฟังก์ชันข้างต้นจะใช้คีย์เป็นอาร์กิวเมนต์เท่านั้น

ตัวอย่าง

if ($session->check('name')) {
   // name exists and is not null.
}

ลบข้อมูลเซสชัน

ในการลบข้อมูลจากเซสชันเราสามารถใช้ไฟล์ delete() session วิธีการลบข้อมูล

Session::delete($key)

ฟังก์ชันข้างต้นจะใช้เฉพาะคีย์ของค่าที่จะลบออกจากเซสชัน

ตัวอย่าง

$session->delete('name');

เมื่อคุณต้องการอ่านและลบข้อมูลจากเซสชันเราสามารถใช้ไฟล์ consume() session วิธี.

static Session::consume($key)

ฟังก์ชันข้างต้นจะใช้คีย์เป็นอาร์กิวเมนต์เท่านั้น

ตัวอย่าง

$session->consume('name');

ทำลายเซสชัน

เราจำเป็นต้องทำลายเซสชันผู้ใช้เมื่อผู้ใช้ออกจากไซต์และทำลายเซสชัน destroy() ใช้วิธีการ

Session::destroy()

ตัวอย่าง

$session->destroy();

การทำลายเซสชันจะลบข้อมูลเซสชันทั้งหมดออกจากเซิร์ฟเวอร์ แต่จะไม่ลบคุกกี้เซสชัน

ต่ออายุเซสชัน

ในสถานการณ์ที่คุณต้องการต่ออายุเซสชันผู้ใช้เราสามารถใช้ไฟล์ renew() session วิธี.

Session::renew()

ตัวอย่าง

$session->renew();

เสร็จสิ้นเซสชัน

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('/session-object',['controller'=>'Sessions','action'=>'index']);
   $builder->connect('/session-read',['controller'=>'Sessions','action'=>'retrieve_session_data']); $builder->connect('/session-write',['controller'=>'Sessions','action'=> 'write_session_data']);
   $builder->connect('/session-check',['controller'=>'Sessions','action'=>'check_session_data']); $builder->connect('/session-delete',['controller'=>'Sessions','action'=>'delete_session_data']);
   $builder->connect('/session-destroy',['controller'=>'Sessions','action'=>'destroy_session_data']); $builder->fallbacks();
});

สร้างไฟล์ SessionsController.php ไฟล์ที่ src/Controller/SessionsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/SessionsController.php

<?php
namespace App\Controller;
use App\Controller\AppController;
   class SessionsController extends AppController {
   public function retrieveSessionData() {
      //create session object
      $session = $this->request->getSession();
      //read data from session
      $name = $session->read('name');
      $this->set('name',$name);
   }
   public function writeSessionData(){
      //create session object
      $session = $this->request->getSession();
      //write data in session
      $session->write('name','Virat Gandhi'); } public function checkSessionData(){ //create session object $session = $this->request->getSession(); //check session data $name = $session->check('name'); $address = $session->check('address'); $this->set('name',$name); $this->set('address',$address); } public function deleteSessionData(){ //create session object $session = $this->request->getSession(); //delete session data $session->delete('name');
   }
   public function destroySessionData(){
      //create session object
      $session = $this->request->getSession();
      //destroy session
      $session->destroy();
   }
}
?>

สร้างไดเร็กทอรี Sessions ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View เรียกว่าไฟล์ write_session_data.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Sessions/write_session_data.php

The data has been written in session.

สร้างใหม่ View เรียกว่าไฟล์ retrieve_session_data.php ภายใต้เดียวกัน Sessions ไดเร็กทอรีและคัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Sessions/retrieve_session_data.php

Here is the data from session.
Name: <?=$name;?>

สร้างใหม่ View เรียกว่าไฟล์ check_session_data.ctp ภายใต้ไดเร็กทอรี Sessions เดียวกันและคัดลอกโค้ดต่อไปนี้ในไฟล์นั้น

src/Template/Sessions/check_session_data.ctp

<?php if($name): ?> name exists in the session. <?php else: ?> name doesn't exist in the database <?php endif;?> <?php if($address): ?>
address exists in the session.
<?php else: ?>
address doesn't exist in the database
<?php endif;?>

สร้างใหม่ View เรียกว่าไฟล์ delete_session_data.ctp, ภายใต้ไดเร็กทอรี Sessions เดียวกันและคัดลอกโค้ดต่อไปนี้ในไฟล์นั้น

src/Template/Sessions/delete_session_data.ctp

Data deleted from session.

สร้างใหม่ View เรียกว่าไฟล์ destroy_session_data.ctp, ภายใต้ไดเร็กทอรี Sessions เดียวกันและคัดลอกโค้ดต่อไปนี้ในไฟล์นั้น

src/Template/Sessions/destroy_session_data.ctp

Session Destroyed.

เอาต์พุต

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ URL นี้จะช่วยคุณเขียนข้อมูลในเซสชัน

http: // localhost / cakephp4 / session-write

ไปที่ URL ต่อไปนี้ to read session data − http://localhost/cakephp4/session-read

ไปที่ URL ต่อไปนี้ to check session data - http: // localhost / cakephp4 / การตรวจสอบเซสชัน

ไปที่ URL ต่อไปนี้ to delete session data - http: // localhost / cakephp4 / session-delete ไปที่ไฟล์

ไปที่ URL ต่อไปนี้ to destroy session data - http: // localhost / cakephp4 / session-destroy

การจัดการคุกกี้ด้วย CakePHP นั้นง่ายและปลอดภัย มีคลาส CookieComponent ซึ่งใช้สำหรับจัดการ Cookie คลาสนี้มีวิธีการทำงานกับคุกกี้หลายวิธี

ในการทำงานกับคุกกี้ให้เพิ่ม 2 คลาสนี้ในคอนโทรลเลอร์ของคุณ -

use Cake\Http\Cookie\Cookie;
use Cake\Http\Cookie\CookieCollection;

ต้องสร้างวัตถุคุกกี้ก่อนเพื่อลงทะเบียนคุกกี้

$cookie = new Cookie(name,value,expiration time,path,domain);

ชื่อและค่าเป็นสิ่งจำเป็นและอื่น ๆ เป็นพารามิเตอร์ทางเลือก

เขียนคุกกี้

ต่อไปนี้เป็นไวยากรณ์ในการเขียนคุกกี้

$cookie = new Cookie(name,value,expiration time,path,domain);

คุกกี้ที่สร้างขึ้นจะต้องถูกเพิ่มลงใน cookieCollection ดังที่แสดงด้านล่าง -

$cookie = new Cookie('name','XYZ'); $cookies = new CookieCollection([$cookie]);

หากสร้างวัตถุรวบรวมคุกกี้ไว้แล้วสามารถเพิ่มคุกกี้ที่เหลือได้ดังที่แสดงด้านล่าง -

$cookies = $cookies->add($cookie);

อ่านคุกกี้

หากต้องการอ่านคุกกี้ให้ใช้วิธี get () จากการรวบรวมคุกกี้

ไวยากรณ์

ไวยากรณ์สำหรับคุกกี้อ่านมีดังนี้ -

Cake\Http\Cookie\CookieCollection::get($name)

สิ่งนี้จะส่งกลับคุณ cookiecollection Interface เพื่อให้ได้มูลค่าของคุกกี้คุณจะต้องเรียกใช้เมธอด getValue ()

Cake\Http\Cookie\CookieCollection Interface::getValue()

ตรวจสอบคุกกี้

has() วิธีการจาก cookieCollection จะบอกคุณว่ามีคุกกี้อยู่หรือไม่

Cake\Http\Cookie\CookieCollection::has($name)

ตัวอย่าง

echo $isPresent = $this->cookies->has('name');

ลบคุกกี้

remove()ใช้วิธีการลบคุกกี้ ต่อไปนี้เป็นไวยากรณ์ของวิธี remove ()

Cake\Http\Cookie\CookieCollection::remove($name)

เมธอด remove () จะใช้อาร์กิวเมนต์หนึ่งชื่อของตัวแปรคุกกี้ ($ name) เพื่อลบ

ตัวอย่าง 1

$test = $this->cookies->remove('name');

ตัวอย่าง 2

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('cookie/testcookies',['controller'=>'Cookies','action'=>'testCookies']); $builder->fallbacks();
});

สร้างไฟล์ CookiesController.php ไฟล์ที่ src/Controller/CookiesController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/Cookies/CookiesController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Http\Cookie\Cookie;
   use Cake\Http\Cookie\CookieCollection;
   class CookiesController extends AppController{
      public $cookies; public function testCookies() { $cookie = new Cookie('name','XYZ');
         $this->cookies = new CookieCollection([$cookie]);
         $cookie_val = $this->cookies->get('name');
         $this->set('cookie_val',$cookie_val->getValue());
         $isPresent = $this->cookies->has('name');
         $this->set('isPresent',$isPresent);
         $this->set('count', $this->cookies->count());
         $test = $this->cookies->remove('name');
         $this->set('count_afterdelete', $test->count());
      }
   }
?>

สร้างไดเร็กทอรี Cookies ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View เรียกว่าไฟล์ test_cookies.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Cookie/test_cookies.php

The value of the cookie is: <?php echo $cookie_val; ?> <br/> <?php if($isPresent):
?>
The cookie is present.
<?php
   else:
?>
The cookie isn't present.
<?php
   endif;
?>
<br/>
<?php
   echo "The count of cookie before delete is :" .$count; ?> <br/> <?php echo "The count of cookie after delete is :" .$count_afterdelete;
?>

เอาต์พุต

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ - http: // localhost / cakephp4 / cookie / testcookies

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

การเข้ารหัสและถอดรหัส

ไลบรารีความปลอดภัยใน CakePHP มีวิธีการซึ่งเราสามารถเข้ารหัสและถอดรหัสข้อมูลได้ ต่อไปนี้เป็นสองวิธีที่ใช้เพื่อวัตถุประสงค์เดียวกัน

static Cake\Utility\Security::encrypt($text, $key, $hmacSalt = null) static Cake\Utility\Security::decrypt($cipher, $key, $hmacSalt = null)

วิธีการเข้ารหัสจะใช้ข้อความและคีย์เป็นอาร์กิวเมนต์ในการเข้ารหัสข้อมูลและค่าที่ส่งคืนจะเป็นค่าที่เข้ารหัสด้วยการตรวจสอบ HMAC

ในการแฮชข้อมูล hash()ใช้วิธีการ ต่อไปนี้เป็นไวยากรณ์ของวิธี hash ()

static Cake\Utility\Security::hash($string, $type = NULL, $salt = false)

CSRF

CSRF ย่อมาจาก Cross Site Request Forgery. เมื่อเปิดใช้งานส่วนประกอบ CSRF คุณจะได้รับการป้องกันจากการโจมตี CSRF เป็นช่องโหว่ที่พบบ่อยในเว็บแอปพลิเคชัน

ช่วยให้ผู้โจมตีสามารถจับภาพและเล่นซ้ำคำขอก่อนหน้าและบางครั้งส่งคำขอข้อมูลโดยใช้แท็กรูปภาพหรือทรัพยากรบนโดเมนอื่น ๆ CSRF สามารถเปิดใช้งานได้โดยเพียงแค่เพิ่มไฟล์CsrfComponent ไปยังอาร์เรย์ส่วนประกอบของคุณดังที่แสดงด้านล่าง -

public function initialize(): void {
   parent::initialize();
   $this->loadComponent('Csrf');
}

CsrfComponent รวมเข้ากับไฟล์ FormHelper. ทุกครั้งที่คุณสร้างแบบฟอร์มด้วย FormHelper จะแทรกฟิลด์ที่ซ่อนไว้ซึ่งมีโทเค็น CSRF

แม้ว่าจะไม่แนะนำให้ใช้ แต่คุณอาจต้องการปิดใช้งาน CsrfComponent สำหรับคำขอบางอย่าง คุณสามารถทำได้โดยใช้ตัวเลือกเหตุการณ์ของตัวควบคุมในช่วงbeforeFilter() วิธี.

public function beforeFilter(Event $event) { $this->eventManager()->off($this->Csrf);
}

ส่วนประกอบความปลอดภัย

ส่วนประกอบด้านความปลอดภัยช่วยเพิ่มความปลอดภัยให้กับแอปพลิเคชันของคุณ มีวิธีการสำหรับงานต่างๆเช่น -

  • Restricting which HTTP methods your application accepts- คุณควรตรวจสอบเมธอด HTTP เสมอซึ่งจะใช้ก่อนที่จะเรียกใช้ผลข้างเคียง คุณควรตรวจสอบวิธี HTTP หรือใช้Cake\Network\Request::allowMethod() เพื่อให้แน่ใจว่าใช้วิธี HTTP ที่ถูกต้อง

  • Form tampering protection- ตามค่าเริ่มต้น SecurityComponent จะป้องกันไม่ให้ผู้ใช้ปลอมแปลงแบบฟอร์มในรูปแบบเฉพาะ SecurityComponent จะป้องกันสิ่งต่อไปนี้ -

    • ไม่สามารถเพิ่มฟิลด์ที่ไม่รู้จักลงในแบบฟอร์ม

    • ไม่สามารถลบฟิลด์ออกจากแบบฟอร์ม

    • ไม่สามารถแก้ไขค่าในอินพุตที่ซ่อนอยู่ได้

  • Requiring that SSL be used - การดำเนินการทั้งหมดที่ต้องใช้ SSL- ปลอดภัย

  • Limiting cross controller communication- เราสามารถ จำกัด ผู้ควบคุมที่สามารถส่งคำขอไปยังผู้ควบคุมนี้ได้ นอกจากนี้เรายังสามารถ จำกัด การดำเนินการที่สามารถส่งคำขอไปยังการดำเนินการของผู้ควบคุมนี้ได้

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config/routes.php ตามที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   //$builder->connect('/pages', ['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('login',['controller'=>'Logins','action'=>'index']);
   $builder->fallbacks();
});

สร้างไฟล์ LoginsController.php ไฟล์ที่ src/Controller/LoginsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/LoginsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class LoginsController extends AppController {
      public function initialize() : void {
         parent::initialize();
         $this->loadComponent('Security');
      }
         public function index(){
      }
   }
?>

สร้างไดเร็กทอรี Logins ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ index.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Logins/index.php

<?php
   echo $this->Form->create(NULL,array('url'=>'/login')); echo $this->Form->control('username');
   echo $this->Form->control('password'); echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ - http: // localhost / cakephp4 / login

เอาต์พุต

เมื่อดำเนินการคุณจะได้รับผลลัพธ์ต่อไปนี้

บ่อยครั้งในขณะสร้างเว็บไซต์เราจำเป็นต้องตรวจสอบความถูกต้องบางอย่างก่อนที่จะประมวลผลข้อมูลเพิ่มเติม CakePHP มีแพ็คเกจการตรวจสอบความถูกต้องเพื่อสร้างตัวตรวจสอบความถูกต้องที่สามารถตรวจสอบข้อมูลได้อย่างง่ายดาย

วิธีการตรวจสอบ

CakePHP มีวิธีการตรวจสอบความถูกต้องที่หลากหลายใน Validation Class รายการที่ได้รับความนิยมมากที่สุดมีดังต่อไปนี้

ไวยากรณ์

เพิ่ม (string $ field, array | string $name, array|Cake\Validation\ValidationRule $กฎ [])

พารามิเตอร์
  • ชื่อของเขตข้อมูลที่จะเพิ่มกฎ

  • นามแฝงสำหรับกฎเดียวหรืออาร์เรย์หลายกฎ

  • กฎที่จะเพิ่ม

ผลตอบแทน

$ นี้

คำอธิบาย

เพิ่มกฎใหม่ในชุดกฎของฟิลด์ หากอาร์กิวเมนต์ที่สองเป็นอาร์เรย์รายการกฎสำหรับฟิลด์จะถูกแทนที่ด้วยอาร์กิวเมนต์ที่สองและอาร์กิวเมนต์ที่สามจะถูกละเว้น

ไวยากรณ์

allowEmpty ( ฟิลด์สตริง$บูลีน | สตริง | เรียกได้$ เมื่อเป็นจริงสตริง | null $ ข้อความ null)

พารามิเตอร์
  • ชื่อของเขตข้อมูล

  • ระบุว่าเมื่อใดที่อนุญาตให้ฟิลด์ว่าง ค่าที่ถูกต้องคือtrue (always), 'create', 'update'. หากมีการส่งผ่านที่เรียกได้ฟิลด์จะเว้นว่างไว้ก็ต่อเมื่อการโทรกลับส่งกลับเป็นจริงเท่านั้น

  • ข้อความที่จะแสดงว่าเขตข้อมูลไม่ใช่

ผลตอบแทน $ นี้
คำอธิบาย

อนุญาตให้ฟิลด์ว่าง

ไวยากรณ์

ตัวอักษรและตัวเลข ( ฟิลด์สตริง$ , สตริง | null $ ข้อความ null, สตริง | เรียกได้ | null $ เมื่อ null)

พารามิเตอร์
  • ฟิลด์ที่คุณต้องการใช้กฎ

  • ข้อความแสดงข้อผิดพลาดเมื่อกฎล้มเหลว

  • "สร้าง" หรือ "อัปเดต" หรือเรียกได้ว่าเป็นจริงเมื่อควรใช้กฎการตรวจสอบความถูกต้อง

ผลตอบแทน

$ นี้

คำอธิบาย

เพิ่มกฎตัวเลขและตัวอักษรลงในฟิลด์

ไวยากรณ์

creditCard ( ฟิลด์สตริง$สตริง$ type 'all' สตริง | null $ ข้อความ null สตริง | callable | null $ เมื่อ null)

พารามิเตอร์
  • ฟิลด์ที่คุณต้องการใช้กฎ

  • ประเภทของการ์ดที่คุณต้องการอนุญาต ค่าเริ่มต้นเป็น "ทั้งหมด" คุณยังสามารถจัดหาประเภทบัตรที่ยอมรับได้หลายประเภทเช่น ['mastercard', 'visa', 'amex']

  • ข้อความแสดงข้อผิดพลาดเมื่อกฎล้มเหลว

  • ไม่ว่าจะเป็น "สร้าง" หรือ "อัปเดต" หรือเรียกได้ว่าเป็นจริงเมื่อกฎการตรวจสอบความถูกต้องถูกนำไปใช้

ผลตอบแทน

$ นี้

คำอธิบาย

เพิ่มกฎบัตรเครดิตลงในฟิลด์

ไวยากรณ์

อีเมล (ฟิลด์สตริง $ บูลีน$ checkMXเท็จสตริง | null $ ข้อความ null สตริง | เรียกได้ | null, $ เมื่อเป็นโมฆะ)

พารามิเตอร์
  • ฟิลด์ที่คุณต้องการใช้กฎ

  • ตรวจสอบระเบียน MX หรือไม่

  • ข้อความแสดงข้อผิดพลาดเมื่อกฎล้มเหลว

  • ไม่ว่าจะเป็น "สร้าง" หรือ "อัปเดต" หรือเรียกได้ว่าเป็นจริงเมื่อกฎการตรวจสอบความถูกต้องถูกนำไปใช้

ผลตอบแทน

$ นี้

คำอธิบาย

เพิ่มกฎการตรวจสอบอีเมลลงในฟิลด์

ไวยากรณ์

maxLength ( ฟิลด์สตริง$ , จำนวนเต็ม$ สูงสุด , สตริง | null $ ข้อความ null, สตริง | เรียกได้ | null $ เมื่อ null)

พารามิเตอร์
  • ฟิลด์ที่คุณต้องการใช้กฎ

  • ความยาวสูงสุดที่อนุญาต

  • ข้อความแสดงข้อผิดพลาดเมื่อกฎล้มเหลว

  • ทั้ง 'create' หรือ 'update' หรือก callable ที่คืนค่าจริงเมื่อควรใช้กฎการตรวจสอบความถูกต้อง

ผลตอบแทน

$ นี้

คำอธิบาย

เพิ่มกฎการตรวจสอบความยาวสตริงลงในฟิลด์

ไวยากรณ์

minLength ( ฟิลด์สตริง$ , จำนวนเต็ม$ นาที , สตริง | null $ ข้อความ null, สตริง | เรียกได้ | null $ เมื่อ null)

พารามิเตอร์
  • ฟิลด์ที่คุณต้องการใช้กฎ

  • ความยาวสูงสุดที่อนุญาต

  • ข้อความแสดงข้อผิดพลาดเมื่อกฎล้มเหลว

  • ทั้ง 'create' หรือ 'update' หรือก callableซึ่งจะคืนค่าจริงเมื่อควรใช้กฎการตรวจสอบความถูกต้อง

ผลตอบแทน

$ นี้

คำอธิบาย

เพิ่มกฎการตรวจสอบความยาวสตริงลงในฟิลด์

ไวยากรณ์

notBlank ( ฟิลด์สตริง$สตริง | null $ ข้อความ null สตริง | callable | null $ เมื่อ null)

พารามิเตอร์
  • ฟิลด์ที่คุณต้องการใช้กฎ

  • ข้อความแสดงข้อผิดพลาดเมื่อกฎล้มเหลว

  • ทั้ง 'create' หรือ 'update' หรือก callable ที่คืนค่าจริงเมื่อควรใช้กฎการตรวจสอบความถูกต้อง

ผลตอบแทน

$ นี้

คำอธิบาย

เพิ่มกฎ notBlank ลงในฟิลด์

สามารถสร้าง Validator ได้โดยเพิ่มสองบรรทัดต่อไปนี้ในคอนโทรลเลอร์

use Cake\Validation\Validator;
$validator = new Validator();

การตรวจสอบข้อมูล

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

$validator->notEmpty('username', 'We need username.')->add( 'username', 'validFormat', ['rule' => 'email','message' => 'E-mail must be valid']); $validator->notEmpty('password', 'We need password.');
$errors = $validator->errors($this->request->data());

การใช้ออบเจ็กต์ $ validator เราได้เรียกไฟล์ notEmpty()ซึ่งจะทำให้แน่ใจได้ว่าชื่อผู้ใช้จะต้องไม่ว่างเปล่า หลังจากนั้นเราได้ล่ามโซ่add() วิธีเพิ่มการตรวจสอบความถูกต้องอีกหนึ่งรายการสำหรับรูปแบบอีเมลที่เหมาะสม

หลังจากนั้นเราได้เพิ่มการตรวจสอบความถูกต้องสำหรับฟิลด์รหัสผ่านด้วยวิธี notEmpty () ซึ่งจะยืนยันว่าฟิลด์รหัสผ่านจะต้องไม่ว่างเปล่า

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('validation',['controller'=>'Valids','action'=>'index']); $builder->fallbacks();
});

สร้างไฟล์ ValidsController.php ไฟล์ที่ src/Controller/ValidsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/ValidsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Validation\Validator;
   class ValidsController extends AppController{
      public function index(){
         $validator = new Validator(); $validator->notEmpty('username', 'We need username.')->add(
            'username', 'validFormat', ['rule' => 'email','message' => 'E-mail must be valid']);
         $validator->notEmpty('password', 'We need password.'); $errors = $validator->errors($this->request->getData());
         $this->set('errors',$errors);
      }
   }
?>

สร้างไดเร็กทอรี Valids ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View เรียกว่าไฟล์ index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Valids/index.php

<?php
   if($errors) { foreach($errors as $error) foreach($error as $msg) echo '<font color="red">'.$msg.'</font><br>';
   } else {
      echo "No errors.";
   }
   echo $this->Form->create(NULL,array('url'=>'/validation')); echo $this->Form->control('username');
   echo $this->Form->control('password'); echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ -

http: // localhost / cakephp4 / การตรวจสอบ

เอาต์พุต

คลิกที่ปุ่มส่งโดยไม่ต้องป้อนอะไรเลย คุณจะได้รับผลลัพธ์ต่อไปนี้

Http - ไคลเอนต์

ไคลเอ็นต์ http สามารถใช้เพื่อส่งคำขอเช่น GET, POST, PUT เป็นต้น

ในการทำงานกับไคลเอนต์ http ให้เพิ่มสิ่งต่อไปนี้ -

use Cake\Http\Client;

ให้เราทำตัวอย่างเพื่อทำความเข้าใจการทำงานของไคลเอนต์ HTTP

วิธีการรับ HTTP

ในการรับข้อมูลจากให้ http url คุณสามารถทำได้ดังนี้ -

$response = $http->get('https://jsonplaceholder.typicode.com/users');

ในกรณีที่คุณต้องส่งพารามิเตอร์การสืบค้นข้อมูลบางรายการสามารถส่งผ่านได้ดังนี้ -

$response = $http->get('https://jsonplaceholder.typicode.com/users', ["id", 1]);

หากต้องการรับคำตอบคุณสามารถทำได้ดังนี้ -

สำหรับ normal text data -

$response->getBody();

สำหรับ Json -

$response->getJson();

สำหรับ Xml -

$response->getXml()

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('getData',['controller'=>'Requests','action'=>'index']); $builder->fallbacks();
});

สร้างไฟล์ RequestsController.php ไฟล์ที่ src/Controller/RequestsController.php. คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์

src/Controller/RequestsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Http\Client;
   class RequestsController extends AppController{
      public function index(){
         $http = new Client(); $response = $http->get('https://jsonplaceholder.typicode.com/users'); $stream = $response->getJson(); $this->set('response',$stream);
      }
   }
?>

สร้างไดเร็กทอรี Requests ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View เรียกว่าไฟล์ index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Requests/index.php

<h3>All Users from url : https://jsonplaceholder.typicode.com/users</h3>
<?php
   if($response) {
      foreach($response as $res => $val) { echo '<font color="gray">Name: '.$val["name"].' Email -'.$val["email"].'</font><br>';
      }
   }
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ -

http://localhost/cakephp4/getData

เอาต์พุต

คลิกที่ปุ่มส่งโดยไม่ต้องป้อนอะไรเลย คุณจะได้รับผลลัพธ์ต่อไปนี้

วิธี HTTP POST

ในการทำงานกับโพสต์คุณต้องโทรไปที่ไคลเอนต์ $ http ดังนี้ -

$response = $http->post('yoururl', data);

ให้เราดูตัวอย่างเดียวในเรื่องเดียวกัน

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('postData',['controller'=>'Requests','action'=>'index']); $builder->fallbacks();
});

สร้างไฟล์ RequestsController.php ไฟล์ที่ src/Controller/RequestsController.php.คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์ ละเว้นหากสร้างแล้ว

src/Controller/RequestsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\Http\Client;
   class RequestsController extends AppController{
      public function index(){
         $http = new Client(); $response = $http->post('https://postman-echo.com/post', [
            'name'=> 'ABC',
            'email' => '[email protected]'
         ]);
      }
   }
?>

สร้างไดเร็กทอรี Requests ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ index.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src/Template/Requests/index.php

<h3>Testing Post Method</h3>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ -

http: // localhost / cakephp4 / postData

เอาต์พุต

ด้านล่างเป็นผลลัพธ์ของรหัส -

ในทำนองเดียวกันคุณสามารถลองใช้วิธี PUT

$http = new Client();
$response = $http->put('https://postman-echo.com/post', [
   'name'=> 'ABC',
   'email' => '[email protected]'
]);

หากเราต้องการแสดงชุดข้อมูลที่มีขนาดใหญ่เราสามารถใช้การแบ่งหน้าได้และคุณลักษณะนี้สามารถใช้ได้กับ cake php 4 ซึ่งใช้งานง่ายมาก

เรามีตารางชื่อ "บทความ" พร้อมข้อมูลต่อไปนี้ -

ให้เราใช้การแบ่งหน้าเพื่อแสดงข้อมูลในรูปแบบของหน้าแทนที่จะแสดงทั้งหมดพร้อมกัน

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('posts',['controller'=>'Posts','action'=>'index']); $builder->fallbacks();
});

สร้างไฟล์ PostsController.php ไฟล์ที่ src/Controller/PostsController.php.คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์ ไม่ต้องสนใจหากสร้างแล้ว

src / Controller / PostsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class PostsController extends AppController {
      public function index(){
         $this->loadModel('articles'); $articles = $this->articles->find('all')->order(['articles.id ASC']); $this->set('articles', $this->paginate($articles, ['limit'=> '3']));
      }
   }
?>

ข้อมูลจากตารางบทความถูกดึงมาโดยใช้ -

$this->loadModel('articles'); $articles = $this->articles->find('all')->order(['articles.id ASC']);

ในการใช้การแบ่งหน้าและเราจะแสดงข้อมูลด้วย 3 ต่อเร็กคอร์ดและสิ่งเดียวกันจะทำดังนี้ -

$this->set('articles', $this->paginate($articles, ['limit'=> '3']));

นี่เพียงพอที่จะเปิดใช้งานการแบ่งหน้าในตารางบทความ

สร้างไดเร็กทอรี Posts ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ index.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / กระทู้ / index.php

<div>
<?php foreach ($articles as $key=>$article) {?> <a href="#"> <div> <p><?= $article->title ?> </p>
   <p><?= $article->details ?></p> </div> </a> <br/> <?php } ?> <ul class="pagination"> <?= $this->Paginator->prev("<<") ?>
<?= $this->Paginator->numbers() ?> <?= $this->Paginator->next(">>") ?>
</ul>
</div>

การแบ่งหน้าสำหรับรายการเพจทำได้ดังนี้ -

<ul class="pagination">
<?= $this->Paginator->prev("<<") ?> <?= $this->Paginator->numbers() ?>
<?= $this->Paginator->next(">>") ?>
</ul>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ -

http: // localhost / cakephp4 / กระทู้

เอาต์พุต

เมื่อคุณเรียกใช้รหัสคุณจะเห็นผลลัพธ์ต่อไปนี้ -

คลิกที่ตัวเลขด้านล่างเพื่อสลับไปยังหน้าถัดไปหรือใช้ปุ่มถัดไปหรือก่อนหน้า

For example

คุณจะเห็นว่า page = 2 ต่อท้าย page url ในเบราว์เซอร์

ในการทำงานกับวันที่และเวลาใน cakephp4 เราจะใช้ประโยชน์จากคลาส FrozenTime ที่มีอยู่

ในการทำงานกับวันที่และเวลาให้รวมชั้นเรียนไว้ในตัวควบคุมของคุณ

use Cake\I18n\FrozenTime;

ให้เราทำงานตามตัวอย่างและแสดงวันที่และเวลาโดยใช้คลาส FrozenTime

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([ 'httpOnly' => true, ])); $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']); $builder->connect('datetime',['controller'=>'Dates','action'=>'index']);
   $builder->fallbacks();
});

สร้างไฟล์ DatesController.php ไฟล์ที่ src/Controller/DatesController.php.คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์ ละเว้นหากสร้างแล้ว

src / คอนโทรลเลอร์ / DatesController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\I18n\FrozenTime;
   class DatesController extends AppController{
      public function index(){
         $time = FrozenTime::now();
         $now = FrozenTime::parse('now'); $_now = $now->i18nFormat('yyyy-MM-dd HH:mm:ss'); $this->set('timenow', $_now); $now = FrozenTime::parse('now');
         $nice = $now->nice();
         $this->set('nicetime', $nice);
         $hebrewdate = $now->i18nFormat(\IntlDateFormatter::FULL, null, 'en-IR@calendar=hebrew');
         $this->set("hebrewdate",$hebrewdate);
         $japanesedate = $now->i18nFormat(\IntlDateFormatter::FULL, null, 'en-IR@calendar=japanese');
         $this->set("japanesedate",$japanesedate);
         $time = FrozenTime::now(); $this->set("current_year",$time->year); $this->set("current_month",$time->month); $this->set("current_day",$time->day);
      }
   }
?>

สร้างไดเร็กทอรี Dates ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ Viewไฟล์ชื่อ index.php คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / วันที่ / index.php

<?php
   echo "The Current date and time is = ".$timenow;
   echo "<br/>";
   echo "Using nice format available = ".$nicetime; echo "<br/>"; echo "Date and Time as per Hebrew Calender =" .$hebrewdate;
   echo "<br/>";
   echo "Date and Time as per Japanese Calender =" .$japanesedate; echo "<br/>"; echo "Current Year = ".$current_year;
   echo "<br/>";
   echo "Current Month = ".$current_month; echo "<br/>"; echo "Current Day = ".$current_day;
?>

ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ -

http: // localhost / cakephp4 / วันที่และเวลา

เอาต์พุต

เมื่อคุณเรียกใช้รหัสคุณจะเห็นผลลัพธ์ต่อไปนี้ -

ในการอัปโหลดไฟล์เราจะใช้ตัวช่วยแบบฟอร์ม นี่คือตัวอย่างสำหรับการอัปโหลดไฟล์

ตัวอย่าง

ทำการเปลี่ยนแปลงในไฟล์ config / route.php ดังที่แสดงในโปรแกรมต่อไปนี้

config / route.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class); $routes->scope('/', function (RouteBuilder $builder) { $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); //$builder->connect('/pages',['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('fileupload',['controller'=>'Files','action'=>'index']); $builder->fallbacks();
});

สร้างไฟล์ FilesController.php ไฟล์ที่ src/Controller/FilesController.php.คัดลอกโค้ดต่อไปนี้ในไฟล์คอนโทรลเลอร์ ไม่ต้องสนใจหากสร้างแล้ว

สร้างไฟล์อัพโหลด / ไดเร็กทอรีใน src /. ไฟล์ที่อัพโหลดจะถูกบันทึกไว้ในไฟล์อัพโหลด / โฟลเดอร์

src / คอนโทรลเลอร์ / FilesController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   use Cake\View\Helper\FormHelper;
   class FilesController extends AppController {
      public function index(){
         if ($this->request->is('post')) { $fileobject = $this->request->getData('submittedfile'); $uploadPath = '../uploads/';
            $destination = $uploadPath.$fileobject->getClientFilename(); // Existing files with the same name will be replaced. $fileobject->moveTo($destination);
         }
      }
   }
?>

สร้างไดเร็กทอรี Files ที่ src/Template และภายใต้ไดเร็กทอรีนั้นให้สร้างไฟล์ View เรียกว่าไฟล์ index.php. คัดลอกรหัสต่อไปนี้ในไฟล์นั้น

src / แม่แบบ / ไฟล์ / index.php

<?php
   echo $this->Form->create(NULL, ['type' => 'file']);
   echo $this-&gtl;Form->file('submittedfile'); echo $this->Form->button('Submit');
   echo $this->Form->end(); $uploadPath ='../uploads/';
   $files = scandir($uploadPath, 0);
   echo "Files uploaded in uploads/ are:<br/>";
   for($i = 2; $i < count($files); $i++)
      echo "File is - ".$files[$i]."<br>";
?>

ไฟล์ที่บันทึกในการอัพโหลด / โฟลเดอร์จะแสดงรายการสำหรับผู้ใช้ ดำเนินการตามตัวอย่างข้างต้นโดยไปที่ URL ต่อไปนี้ -

http: // localhost / cakephp4 / fileupload -

เอาต์พุต

เมื่อคุณรันโค้ดด้านบนคุณจะเห็นผลลัพธ์ต่อไปนี้ -