Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Zend Framework dari awal - model dan mengintegrasikan Doctrine ORM

by
Difficulty:IntermediateLength:LongLanguages:

Indonesian (Bahasa Indonesia) translation by Afiff Soebarkah (you can also view the original English article)

Siap untuk mengambil keterampilan PHP Anda ke tingkat berikutnya? Dalam baru "Dari menggaruk" seri ini, kita akan fokus pada Zend Framework, kerangka kerja PHP penuh-tumpukan yang diciptakan oleh Zend Technologies. Tutorial ini kedua pada seri kami berhak "Model dan mengintegrasikan Doctrine ORM".


Tinjauan

Selamat datang kembali ke kami Zend Framework dari seri awal! Dalam penuntun ini terakhir, kita belajar beberapa hal dasar tentang Zend Framework, seperti:

  • Dimana untuk mendownload file Zend Framework terbaru
  • Dimana dan bagaimana untuk mengatur secara lokal
  • Menciptakan proyek Zend Framework pertama dan menyiapkan virtual pada server web Anda
  • Bagaimana tepatnya Zend Framework menerapkan pola MVC dan routing aplikasi standar yang
  • Lewat data dari controller ke view nya
  • Menciptakan layout situs-lebar untuk aplikasi Zend Framework
  • Menciptakan baru controller dan Action

Jika Anda belum, Anda harus memberikan tutorial sebelumnya membaca. Itu akan benar-benar membuat lebih mudah bagi Anda untuk memahami beberapa dasar Zend Framework dan membantu Anda memahami beberapa hal yang kita membahas dalam tutorial ini.

Dalam kedua ini bagian dari seri, kita akan berbicara tentang bagian penting dari aplikasi web-model. Kami juga akan mengambil melihat bagaimana mengintegrasikan sangat populer Doctrine ORM dengan proyek Zend Framework kami, dan mencari tahu mengapa itu jauh lebih baik untuk digunakan daripada Zend_Db asli Zend Framework. Jadi, tanpa basa-basi lagi, mari kita mulai!


Apa sebenarnya yang "Model"?

Ketika saya mulai mencoba untuk memahami konsep MVC, saya membaca cukup banyak analogi, yang berusaha untuk menjelaskan persis apa setiap komponen ini mewakili. Salah satu analogi terbaik yang saya telah membaca sejauh ini adalah dari artikel ini, cara lain untuk berpikir tentang MVC. Ia pergi sesuatu seperti ini:

Jadi, mari kita Bayangkan sebuah bank.

Aman adalah Database-ini adalah di mana semua barang paling penting disimpan, dan baik dilindungi dari dunia luar.

Kemudian kami memiliki para bankir atau dalam program syarat model. Para bankir adalah satu-satunya yang memiliki akses ke aman (DB). Mereka umumnya lemak, tua dan malas, yang mengikuti cukup baik dengan salah satu aturan MVC: * lemak model, kurus controller *. Kita akan melihat mengapa dan bagaimana analogi ini berlaku sedikit kemudian.
Sekarang kami punya pekerja bank rata-rata kami gophers, pelari, kontroler. Controller atau menghubungkan diri melakukan semua berjalan sekitar, itulah mengapa mereka harus menjadi bugar dan kurus. Mereka mengambil menjarah atau informasi dari para bankir (model) dan membawanya ke nasabah bank pandangan.

Para bankir (model) telah menjadi pekerjaan untuk sementara waktu, oleh karena itu mereka membuat semua keputusan penting. Yang membawa kita kepada aturan lain: * tetap sebanyak logika bisnis dalam Model sebagai mungkin *. Controller, pekerja kami rata-rata, harus tidak membuat keputusan seperti itu, mereka meminta bankir untuk rincian, mendapatkan info, dan menyampaikannya kepada nasabah (View). Oleh karena itu, kami terus mengikuti aturan * lemak model, kurus controller *. Gophers tidak membuat keputusan penting, tetapi mereka tidak dapat polos bodoh (dengan demikian sedikit logika bisnis dalam controller adalah OK). Namun, segera setelah gopher mulai berpikir terlalu banyak bankir marah dan bank Anda (atau Anda app) keluar dari bisnis. Jadi sekali lagi, selalu ingat untuk offload sebanyak bisnis logika (atau pengambilan keputusan) model.

Sekarang, para bankir yakin sebagai neraka tidak akan berbicara dengan pelanggan (View) secara langsung, mereka terlalu penting di kursi mereka nyaman untuk itu. Dengan demikian aturan lain diikuti: * model harus tidak berbicara dengan pemandangan *. Ini komunikasi antara bank dan nasabah (Model dan pandangan) selalu ditangani oleh gopher (Controller). (Ya, ada beberapa pengecualian untuk aturan ini untuk super Pelanggan VIP, tapi mari kita tetap berpegang pada dasar-dasar untuk saat ini).

Hal ini juga terjadi yang memiliki satu pekerja (Controller) untuk mendapatkan informasi dari lebih dari satu bankir, dan itu sempurna dapat diterima. Namun, jika para bankir berhubungan (jika tidak bagaimana lagi mereka akan mendarat pekerjaan bagus seperti itu?) ... para bankir (model) akan saling berkomunikasi pertama, dan kemudian melewati kumulatif informasi kepada mereka gopher, yang dengan senang hati akan mengirimkannya kepada nasabah (View). Jadi di sini adalah aturan lain: * model bersangkutan memberikan informasi ke controller melalui Asosiasi (hubungan) *.

Jadi bagaimana dengan customer (View)? Yah, Bank membuat kesalahan dan pelanggan harus cukup cerdas untuk menyeimbangkan account mereka sendiri dan membuat beberapa keputusan. Dalam MVC istilah kita mendapatkan aturan sederhana lain: * ini adalah sangat baik-baik saja untuk pandangan mengandung beberapa logika, yang berkaitan dengan pandangan atau presentasi *. Berikut kami analogi, pelanggan akan memastikan tidak lupa untuk memakai celana sementara mereka pergi ke bank, tetapi mereka tidak akan memberitahu para bankir bagaimana proses transaksi.

Singkatnya:

  • Model perwakilan dari Database, dan harus mana semua logika bisnis aplikasi berada
  • Controller berkomunikasi dengan model dan meminta mereka untuk mengambil informasi yang mereka butuhkan
  • Informasi ini kemudian melewati Controller ke tampilan dan dituliskan
  • Sangat jarang bahwa Model langsung berinteraksi dengan pemandangan, tapi kadang-kadang mungkin terjadi bila diperlukan
  • Model dapat berbicara dengan model-model lain dan tidak mandiri. Mereka memiliki hubungan yang terjalin dengan satu sama lain
  • Hubungan ini membuatnya lebih mudah dan cepat untuk Controller untuk mendapatkan informasi, karena itu tidak berinteraksi dengan model - model yang dapat melakukan itu sendiri

Kita bisa melihat betapa pentingnya model dalam aplikasi apapun, karena memiliki repsonsible untuk setiap tindakan yang dinamis yang terjadi dalam aplikasi. Sekarang bahwa kita memiliki pemahaman yang jelas tentang tanggung jawab dari Model, serta pemandangan dan Controller, Mari selami menerapkan model di aplikasi kita.


Langkah 1 - mengatur aplikasi Zend Anda hubungkan ke Database

Hal pertama yang kita harus lakukan adalah untuk membuat aplikasi Zend kita terhubung ke database. Untungnya, perintah zf dapat mengurus yang. Buka Prompt Perintah atau Terminal, cd ke folder thenextsocial Anda, dan ketik berikut:

Jika benar, Anda harus mendapatkan output yang mirip dengan:

Selain itu, Anda akan melihat dua baru baris dalam application.ini file:

Kita dapat melihat dengan jelas bahwa SetEnv APPLICATION_ENV direktif menetapkan lingkungan aplikasi kita. Jika dan ketika kita pindah aplikasi untuk lingkungan lain, ini harus menjadi satu-satunya hal yang kita perlu berubah. Hal ini memastikan bahwa semua aplikasi kita bergantung pada karya didefinisikan dalam application.ini, yang akan memastikan bahwa aplikasi kita tidak mengandalkan pengaturan eksternal. Ini membantu menghilangkan masalah "itu bekerja pada mesin pengembangan saya, kenapa tidak bekerja di server produksi?".


Langkah 2 - membuat Database dan beberapa tabel

Sebelum kita membuat Anda Model kami pertama untuk aplikasi, kita akan membutuhkan Database yang Model akan mewakili pertama. Mari kita mulai dengan sesuatu yang sederhana-tabel User, di mana kita akan menyimpan semua pengguna terdaftar untuk TheNextSocial.

Login ke Anda MySQL database dan membuat sebuah database yang disebut thenextsocial. Setelah dibuat, mengeksekusi query berikut untuk membuat tabel User, dan sebuah meja pengaturan pengguna yang menyertainya:

Query SQL ini harus membuat dua tabel. Tabel user dengan kolom berikut:

  • id - ID yang unik untuk setiap pengguna
  • email - alamat email dari pengguna, juga unik
  • sandi - sandi pengguna, yang kita akan hash
  • garam - garam acak, yang kita akan gunakan untuk hash password pengguna
  • date_created - tanggal dan waktu catatan pengguna diciptakan

Dan sebuah meja user_settings, di mana kita akan menyimpan pengaturan terkait dengan pengguna, dengan kolom:

  • id - ID yang unik untuk setiap pengaturan
  • id - id yang foreign key untuk user.id
  • nama - string teks yang mewakili pengaturan
  • nilai - nilai pengaturan

It's worth mengambil catatan bahwa tabel User dan pengaturan pengguna berbagi satu-ke-banyak hubungan yang berarti satu catatan data pengguna dapat berhubungan dengan beberapa pengaturan pengguna catatan. Ini akan membuat lebih mudah untuk menyimpan informasi terkait dengan pengguna, untuk contoh, nama atau profil mereka foto apapun.

Sekarang bahwa kita memiliki beberapa meja untuk bermain-main dengan, mari kita belajar cara membuat Model pertama kami: User Model.


Langkah 3 - membuat Model pertama Anda

Pola desain DAO

Seperti banyak aplikasi, cara yang biasa untuk menggunakan membuat model pada Zend Framework untuk membuat penggunaan pola desain populer disebut "DAO" pola. Dalam pola ini, kami memiliki komponen-komponen berikut:

  • Tabel Data Gateway (DataSource) yang menghubungkan aplikasi kita ke sumber data, Tabel MySQL
  • Data Mapper (DataAccessObject) yang memetakan data yang Diperoleh dari database untuk
  • Objek data (Data) yang mewakili baris dari database kami, setelah DataMapper peta data untuk itu

Mari kita mulai dengan membuat Gateway Data Tabel untuk tabel User menggunakan zf CLI alat:

Zf membuat db-tabel mengambil dua parameter:

  • ClassName - nama kelas
  • database_table - nama tabel

Buka file User.php yang ditemukan di folder aplikasi/model/DbTable dan itu akan terlihat seperti ini:

Sekarang mari kita membuat kelas Data Mapper. Sekali lagi, menggunakan zf CLI alat:

UserMapper.php file akan kosong sekarang tapi kami akan menempatkan beberapa kode kemudian. Untuk saat ini, kita perlu membuat objek Data, yang merupakan User model:

Di sini kita memiliki tiga metode:

  • __construct() - konstruktor untuk kelas. Setelah dipakai, itu membuat instance tabel Data Gateway dan toko
  • Simpan (Application_Model_User $user_object) - mengambil dalam Application_Model_User dan menyimpan data dari objek ke database
  • getUserById($id) - mengambil integer $id yang mewakili satu baris dari tabel database, mengambil itu, kemudian kembali Application_Model_User dengan data yang dipetakan

Membuka User.php dan meletakkan kode berikut:

  • __construct($user_row) - mengambil objek Zend_Db_Table_Row opsional, yang mewakili satu baris dari database, dan peta data untuk dirinya sendiri
  • __set ($name, $value) - fungsi sihir yang mengurus pengaturan semua atribut untuk model.
  • __get($Name) - sebuah fungsi sihir yang mengurus mendapatkan atribut model.

Mari kita coba! Jika Anda mengikuti tutorial sebelumnya, Anda harus memiliki IndexController.php file. Membukanya dan dimasukkan ke dalam kode yang menciptakan pengguna baru:

Sekarang pergi ke http://thenextsocial.local/. Setelah beban, periksa thenextsocial.user tabel di MySQL dan jika semuanya bekerja, Anda harus memiliki catatan pengguna baru!

A new User record!A new User record!A new User record!

Catatan pengguna baru!

Sekarang, mari kita coba memperbarui Catatan ini. Kembali ke IndexController.php dan memperbarui kode untuk mencocokkan berikut:

Periksa Tabel MySQL kembali, dan Anda akan melihat bahwa email untuk catatan telah diperbarui!

Updated User recordUpdated User recordUpdated User record

Diperbarui catatan pengguna

Selamat! Anda telah berhasil membuat pertama Anda pernah Zend Framework Model!


Doktrin ORM

Pengenalan

Dari situs Doctrine ORM, http://doctrine-project.org/projects/orm:

Objek relasional mapper (ORM) untuk PHP yang duduk di atas lapisan abstraksi kuat database (DBAL). Salah satu fitur utamanya adalah pilihan untuk menulis query database dalam dialek SQL berorientasi objek yang berpemilik yang disebut doktrin Query Language (DQL), terinspirasi oleh Hibernates HQL. Ini menyediakan pengembang dengan alternatif yang kuat untuk SQL yang mempertahankan fleksibilitas tanpa memerlukan kode yang tidak perlu duplikasi.

Pada dasarnya, Perpustakaan Doctrine ORM abstrak kebanyakan, jika tidak semua Model implementasi untuk aplikasi. Beberapa keuntungan luar biasa yang saya menemukan ketika menggunakan Doctrine dengan Zend Framework adalah:

  • Sangat mudah digunakan, dijamin untuk memotong waktu pengembangan Anda setengah
  • Bekerja hanya serta dengan berbagai jenis DB's dengan sangat sedikit tweaker diperlukan. Sebagai contoh, doktrin membuatnya sangat mudah bagi saya untuk port aplikasi saya bekerja di sebelum menggunakan MySQL untuk MSSQL
  • Alat perancah, yang disebut Doctrine_Cli yang menciptakan model dari database sangat cepat

Untuk memulai, Anda harus mengunduh Doctrine ORM Perpustakaan pertama dari situs mereka. Aku akan menggunakan 1.2.4 versi. Pergi ke http://www.doctrine-project.org/projects/orm/1.2/download/1.2.4 dan klik pada link Download 1.2.4 paket.

Downloading the Doctrine ORMDownloading the Doctrine ORMDownloading the Doctrine ORM

Mengunduh Doctrine ORM

Setelah download, membukanya dan ekstrak isi. Di dalam, Anda harus melihat doktrin-1.2.4 folder dan package.xml file. Masuk ke dalam folder dan Anda harus melihat folder doktrin, Doctrine.php file dan file lisensi.

Doctrine download contents

Doktrin download isi

Salin folder doktrin dan Doctrine.php file dan meletakkannya di dalam jalan termasuk instalasi PHP Anda. Jika Anda ingat bagaimana kita mengatur Zend Framework dari tutorial terakhir, itu adalah kemungkinan folder yang sama Anda menempatkan Zend file di Perpustakaan.

Doctrine library with Zend library in PHP's include_path

Pustaka Doctrine dengan Zend Perpustakaan dalam PHP include_path

Sekarang kita siap untuk mengintegrasikan dengan aplikasi Zend kami! Mulai dengan membuka application.ini lagi dan menambahkan konfigurasi berikut dalam [pengembangan: produksi] blok:

Sekarang bahwa kita memiliki konfigurasi kami mengatur, buka aplikasi Bootstrap.php file. Anda akan menemukan ini di dalam folder thenextsocial aplikasi.

Bootstrap.php

Bootstrap.php Mari kita menginisialisasi sumber daya yang kita mungkin menggunakan di aplikasi kita. Pada dasarnya, semua sumber daya yang kita perlu instantiate harus ditempatkan di sini. Kita akan menyelam ke dalam ini secara lebih rinci nanti dalam seri, tetapi untuk sekarang, semua perlu Anda ketahui adalah bahwa format untuk metode di sini adalah seperti ini:

Di dalam Bootstra.php file, tambahkan kode berikut untuk menginisialisasi doktrin dengan aplikasi:

Setup yang telah saya lakukan di sini didasarkan pada sebuah script yang saya temukan di masa lalu di http://dev.juokaz.com, yang dikelola oleh Juozas Kaziukenas, salah satu anggota tim di proyek doktrin. Sayangnya, blog sudah dimatikan, jadi saya tidak akan dapat link ke sana lagi. Juga, perhatikan bahwa kita memiliki metode lain yang disebut _initAutoload(). Ini pada dasarnya menginisialisasi Zend Autoloader, yang akan autoload semua model yang dihasilkan di dalam models folder. Ini menghemat kerumitan harus menyertakan file ini satu per satu.

Selanjutnya, kita perlu men-setup script CLI doktrin yang kita akan gunakan untuk auto-menghasilkan model dari database. Kembali ke thenextsocial folder dan membuat sebuah folder bernama script. Di dalam, membuat sebuah file bernama doktrin-cli.php dan meletakkan berikut di dalamnya:

Kembali di dalam folder model dan menghapus file model pengguna kami ada (jika Anda ingin, Anda dapat memindahkannya ke lokasi lain pertama, tapi itu tidak boleh di dalam folder). Selanjutnya, membuka prompt perintah Anda (atau terminal), cd ke script folder dan ketik perintah berikut:

Anda harus melihat sesuatu seperti ini:

Expected Doctrine CLI outputExpected Doctrine CLI outputExpected Doctrine CLI output

Diharapkan doktrin CLI output

Jika semuanya bekerja, mari kita mulai membuat beberapa model! Ketik berikut:

Anda sekarang harus melihat output berikut:

Generating Models using Doctrine CLIGenerating Models using Doctrine CLIGenerating Models using Doctrine CLI

Menghasilkan model menggunakan CLI doktrin

Jika Anda melakukannya, periksa folder model Anda lagi dan Anda akan melihat beberapa merek baru model User dan UserSettings yang telah dihasilkan oleh doktrin!

Generated Models!

Dihasilkan model!

Jika Anda membuka file, Anda tidak akan melihat banyak di dalam. Sebagian besar kode untuk model Disarikan oleh pustaka Doctrine. Dengan memperpanjang kelas Doctrine_Record, kami memiliki tersedia untuk kita banyak prebuilt metode dari perpustakaan. Buka IndexController.php kembali dan mengganti kode tes lama dengan berikut:

Setelah selesai, kembali ke http://thenextsocial.local. Apakah halaman dimuat, periksa Tabel MySQL Anda dan Anda akan melihat bahwa catatan pengguna baru telah dimasukkan!

User record via Doctrine ORMUser record via Doctrine ORMUser record via Doctrine ORM

Catatan pengguna melalui Doctrine ORM

Sekarang, mari kita coba beberapa hal yang lebih rumit — mengambil pengguna yang ada melalui prebuilt doktrin metode dan memperbarui. Memperbarui kode sehingga terlihat seperti ini:

Metode findOneByEmailAndPassword() adalah metode kenyamanan prebuilt oleh doktrin untuk membuatnya lebih mudah untuk memilih satu baris dari database. Hal yang besar tentang hal itu adalah Anda bisa campur-dan-mencocokkan tabel kolom dalam metode. Misalnya, Anda dapat memanggil sesuatu seperti findOneByIdAndNameAndPasswordAndSalt() dan akan masih bekerja!

Updating a User record via Doctrine ORMUpdating a User record via Doctrine ORMUpdating a User record via Doctrine ORM

Mengupdate record User melalui Doctrine ORM

Ada jauh lebih banyak yang bisa kita lakukan sekarang bahwa kita menggunakan Doctrine ORM untuk aplikasi Model implementasi. Hal-hal seperti doktrin Query Language (DQL), mengambil keuntungan dari Model hubungan dan menghasilkan model dari YAML. Untuk sisa seri, kita akan menggunakan Doctrine ORM untuk penerapan Model aplikasi, sehingga Anda akan benar-benar belajar dua hal dalam seri bukan hanya satu! Skor!


Kesimpulan

Sekarang, Anda harus dapat mengetahui berikut:

  • Apa yang "Model"
  • Menghubungkan aplikasi Zend Anda ke database
  • Bagaimana application.ini bekerja
  • Pola desain DAO
  • Membuat model menggunakan alat ZF CLI
  • Dimana untuk mendownload Doctrine ORM dan bagaimana cara menginstalnya
  • Mengintegrasikan Doctrine ORM dengan aplikasi Zend
  • Bootstrap.php
  • Menghasilkan model-model yang menggunakan alat doktrin CLI
  • Dasar penggunaan model-model yang dihasilkan dengan doktrin

Sekarang bahwa Anda tahu bagaimana menerapkan model dalam aplikasi Zend Framework didukung, Anda memiliki pengetahuan untuk membuat situs web dinamis. Cobalah untuk bermain-main dengan aplikasi, membuat beberapa controller yang baru dan model yang membaca, memperbarui, menyimpan dan menghapus dari database.

Dalam tutorial kami berikutnya, kita akan mempelajari beberapa komponen yang sering digunakan Zend Framework Library, Zend_Auth dan Zend_Acl komponen dan membangun sistem autentikasi TheNextSocial's!

Sampai saat itu, menantikan, dan ingat bahwa semua kode yang digunakan di sini juga tersedia di TheNextSocial's GitHub repositori!

Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.