Cho đến bây giờ, chúng tôi đã làm việc với các giá trị đơn giản như {{ dump(pageData) }}1 hoặc {{ dump(pageData) }}2, đây là một mảng chứa các giá trị đơn giản mà chúng tôi lặp lại và in ra từng giá trị. Bây giờ, hãy làm cho mọi thứ thú vị hơn một chút
Tôi sẽ chuyển vào một biến mới có tên là {{ dump(pageData) }}3
// index.php // ... echo $twig->render('homepage.twig', array( 'pageData' => array( 'title' => 'Suit Up!', 'summary' => "You're hip, you're cool, you're a penguin! Now, start dressing like one! Find the latest suits, bow-ties, swim shorts and other outfits here!", 'hasSale' => true, ), // ... ));Nếu bạn chưa thấy mã PHP mà tôi vừa sử dụng để tạo biến này, bạn có thể sử dụng hàm kết xuất tiện dụng để thấy rằng đó là một mảng có khóa {{ dump(pageData) }}4, {{ dump(pageData) }}5 và {{ dump(pageData) }}6
{{ dump(pageData) }}Vậy làm thế nào chúng ta có thể lấy dữ liệu trên các khóa của mảng?
Câu trả lời là với thời kỳ toàn năng (______07). Để in {{ dump(pageData) }}4, chỉ cần nói {{ dump(pageData) }}9. Để in bản tóm tắt, hãy sử dụng thủ thuật tương tự
{{ dump(pageData) }}1Điều này có thể được sử dụng ở bất cứ đâu, như trong câu lệnh {{ dump(pageData) }}10 theo cùng một cách
{{ dump(pageData) }}3Vì vậy, nếu bạn cần dữ liệu từ một mảng, toán tử {{ dump(pageData) }}7 là câu trả lời của bạn
Biến {{ dump(pageData) }}2 cũng là một mảng, nhưng vì nó là một tập hợp các phần tử nên chúng ta lặp qua nó bằng thẻ for thay thế. Nhưng nếu chúng tôi cần lấy mục đầu tiên theo cách thủ công hoặc khóa "không" từ mảng, chúng tôi có thể làm điều đó. Nếu bạn đang nghĩ rằng bạn sẽ nói {{ dump(pageData) }}13, thì bạn đã đúng
{{ dump(pageData) }}7Đôi khi bạn có thể thấy một cú pháp khác để lấy các mục từ một mảng
{{ dump(pageData) }}8Đừng để điều này làm bạn bối rối - hầu như bạn luôn muốn sử dụng dấu chấm. Cú pháp dấu ngoặc vuông chỉ cần thiết trong một số trường hợp không phổ biến khi bạn cần sử dụng một biến làm khóa
{{ dump(pageData) }}9Mẹo
{{ dump(pageData) }}14 được sử dụng nếu bạn muốn buộc loại bỏ thuộc tính của một đối tượng như một mảng, thay vì cố gắng truy cập thuộc tính. Đó là trường hợp rất hiếm, vì vậy đừng lo lắng về nó
Tôi sẽ làm phức tạp thêm một lần nữa bằng cách thay đổi giao diện của biến {{ dump(pageData) }}2. Nhưng trước tiên, hãy sử dụng chức năng kết xuất của người bạn của chúng ta để thấy rằng hiện tại {{ dump(pageData) }}2 chỉ là một tập hợp các chuỗi
{{ dump(pageData) }}3Bây giờ, tôi sẽ thay đổi biến {{ dump(pageData) }}2
{{ dump(pageData) }}5Sau khi tôi thay đổi, hãy làm mới trang để thấy rằng {{ dump(pageData) }}2 hiện là một tập hợp của các đối tượng {{ dump(pageData) }}19. Mỗi đối tượng {{ dump(pageData) }}19 có thuộc tính {{ dump(pageData) }}31 và {{ dump(pageData) }}32
Nếu chúng tôi không thay đổi bất cứ điều gì bên trong Twig, chúng tôi sẽ gặp lỗi
Lỗi nghiêm trọng có thể bắt được. Đối tượng của lớp Sản phẩm không thể được chuyển đổi thành chuỗi trong twig/vendor/twig/twig/lib/Twig/Environment. php(320). mã eval()'d trên dòng 30
Điều này có nghĩa là chúng ta có thể in một chuỗi, nhưng không thể in một đối tượng. Điều đó có ý nghĩa. Mỗi đối tượng Sản phẩm có các thuộc tính {{ dump(pageData) }}31 và {{ dump(pageData) }}32 và chúng tôi thực sự muốn in các thuộc tính đó riêng lẻ
Mẹo
Nếu một đối tượng có phương thức {{ dump(pageData) }}35, thì nó thực sự có thể được in
Và đoán xem?. Chúng ta có thể sử dụng ký tự dấu chấm một lần nữa để làm điều này. Mặc dù {{ dump(pageData) }}3 là một mảng và mỗi {{ dump(pageData) }}37 là một đối tượng, nhưng việc lấy dữ liệu từ mỗi cái hoàn toàn giống nhau
// index.php // ... echo $twig->render('homepage.twig', array( 'pageData' => array( 'title' => 'Suit Up!', 'summary' => "You're hip, you're cool, you're a penguin! Now, start dressing like one! Find the latest suits, bow-ties, swim shorts and other outfits here!", 'hasSale' => true, ), // ... ));6Làm mới trang để thấy rằng các sản phẩm của chúng tôi có thêm chi tiết
Mẹo
Trong dự án của bạn, bạn có thể sẽ có một hàm hoặc biến Twig mà bạn sử dụng khi đề cập đến các tệp hình ảnh tĩnh, CSS hoặc JS. Kiểm tra tài liệu của bạn để xem
Ổn thỏa. Bằng cách sử dụng hàm {{ dump(pageData) }}38, chúng ta có thể thấy một biến trông như thế nào. Chúng tôi có thể in nó, lặp qua nó hoặc in khóa con hoặc thuộc tính cho nó. Chúng ta nguy hiểm như một con cá voi sát thủ
Đối với dân gian kỹ thuật hơn, đằng sau hậu trường, Twig kiểm tra xem liệu lớp Sản phẩm có thuộc tính công khai {{ dump(pageData) }}31 hay không. Nếu thuộc tính không tồn tại hoặc không công khai, nó sẽ tìm một phương thức {{ dump(pageData) }}70 và gọi nó để lấy giá trị. Điều này cho phép chúng ta nói {{ dump(pageData) }}71 mà không thực sự quan tâm mã PHP của lớp trông như thế nào