Takeaways Key
yang pertama berkomitmen untuk YII 2.0 tarikh kembali ke 2011 tetapi pembangunan meningkat tahun lepas. Pasukan itu menulis semula dengan tujuan untuk menjadi keadaan kerangka PHP generasi baru seni. Ia mengamalkan teknologi dan ciri terkini, seperti komposer, PSR, ruang nama, sifat, dan banyak lagi.
Sesuatu yang patut disebutkan ialah mengikut halaman muat turun YII versi 1.1 sokongan akan berakhir pada 31 Disember 2015, jadi kami mendapat sedikit masa untuk mula berfikir tentang membuat peralihan.
Penggunaan ruang nama dan ciri -ciri meningkatkan keperluan kepada Php 5.4. Di samping itu, anda memerlukan sambungan MB_STRING, PDO dan INTL apabila anda mula membangun. Ini tidak sepatutnya menjadi masalah jika anda menjalankan pelayan anda sendiri, tetapi mungkin jika anda berada di persekitaran bersama. Sudah tentu, pada waktunya, isu itu akan hilang.Pemasangan
Pada masa ini, terdapat dua contoh aplikasi yang tersedia. Terdapat contoh asas yang mengandungi beberapa halaman, halaman kenalan dan halaman log masuk. Contoh lanjutan menambah depan dan backend berasingan, interaksi pangkalan data, pendaftaran dan pemulihan kata laluan.
Saya akan mulakan dengan contoh asas. Jika anda telah melihat Yii sebelum ini, anda akan mengenali asas WebApp yang sama dengan Yii 1.1. Pasang contoh asas dengan komposer menggunakan arahan berikut:
composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic
Anda kemudian boleh menyemak sama ada pelayan anda memenuhi keperluan dengan membuka http: //localhost/yii2-app-basic/requirements.php. Aplikasi sebenar kemudiannya akan dijalankan dari http: // localhost/yii2-app-basic/web/.
Ini adalah perkara penting yang pertama untuk diperhatikan: Ideanya ialah anda menetapkan akar dokumen permohonan anda ke/jalan/ke/aplikasi/web, sama seperti Symfony. Susun atur direktori berubah sedikit dari versi 1.1. Jika anda melihat dengan teliti, perubahan itu masuk akal dan akan meningkatkan keselamatan permohonan anda.
Sebelum ini, semua komponen aplikasi (model, pandangan, pengawal, rangka kerja dan perpustakaan vendor) akan hidup di bawah akar dokumen dalam folder yang dilindungi. Dengan cara itu keselamatan bergantung pada fail .htaccess untuk dihormati, yang bermaksud permohonan anda adalah 100% tidak selamat secara lalai pada Nginx. Menggerakkan semua komponen aplikasi dari akar dokumen menghalang pelayan web daripada menghantar komponen aplikasi anda kepada pengguna.
Anda mungkin mendapati diri anda mencari sumber kerangka sebenar. Rangka kerja ini adalah komponen yang dipasang menggunakan komposer, jadi ia akan tinggal di bawah direktori VendoryiisoftyII. Di sini anda akan mendapat lebih banyak lagi, tetapi buat masa ini, kami hanya akan meninggalkannya.
Buat masa ini, mari kita ubah konfigurasi pelayan web tempatan dan tetapkan root dokumen ke/path/to/application/web. Saya menambah virtualhost http: //yii2-app-basic.localhost/, tetapi lakukan seperti yang anda lihat sesuai untuk keadaan anda sendiri. Konfigurasi lalai ditetapkan untuk menyembunyikan fail skrip dalam URL. Jika anda menggunakan Apache, anda perlu menambah fail .htaccess ke direktori web untuk mengarahkan Apache untuk melakukan penulisan semula, ia tidak ada secara lalai.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
Sekarang kita mempunyai aplikasi asas yang berjalan, beberapa tahniah teratur ...
Anda akan bermula dengan halaman Mula, halaman mengenai halaman, halaman kenalan dan halaman log masuk. Halaman kenalan dan borang log masuk mempunyai fungsi yang sama seperti sebelumnya; Kod CAPTCHA, Pengesahan Bentuk dan dua pengguna yang tersedia untuk log masuk. Pembalakan masuk sama seperti sebelumnya; dekat dengan apa -apa. Namun, ia adalah permulaan yang baik.
Reka bentuk aplikasi asas berubah secara dramatik. Sebelum ini, anda akan mendapat aplikasi yang dibina di atas kerangka CSS cetak biru sedangkan sekarang kita bermula dengan Twitter Bootstrap. Peningkatan? Ia mungkin dibandingkan dengan Rangka Tindakan, tetapi sekali lagi Bootstrap lebih banyak daripada Blueprint yang pernah dicuba.
Bootstrap akan memberi anda pelbagai komponen aplikasi dan akan mempercepat membina aplikasi. Sesetengah mungkin berhujah di sisi lain bahawa semua laman web kelihatan sama dengan bootstrap (tema hanya menetapkan ini sebahagiannya) dan ia juga akan menjadikan laman web anda lebih besar saiz. Sama ada cara, integrasi dengan YII 2.0 dilakukan dengan lanjutan YII2-Bootstrap. Ini menjadikannya sangat mudah untuk mengintegrasikan komponen bootstrap dalam pandangan anda.
Satu lagi perkara yang anda akan perhatikan ialah bar debug di bahagian bawah. Ia dipasang dan diaktifkan secara lalai, seperti dalam Symfony. Ia membolehkan akses cepat kepada banyak maklumat mengenai konfigurasi, permintaan dan pembalakan aplikasi anda. Ia akan menyimpan sejarah permintaan dengan maklumat debug juga.
GII juga hadir lagi dan diaktifkan secara lalai.
GII akan membantu anda dengan menjana kod untuk anda mulakan, satu lagi alat yang hebat untuk membantu mempercepat perkembangan anda. Ia akan menjana model dan pengawal untuk anda. Penjana CRUD akan pergi satu langkah lebih jauh dan menghasilkan set MVC lengkap untuk semua tindakan. GII juga akan menjana kod yang lebih sesuai untuk pengantarabangsaan (I18N) dengan segera memasukkan fungsi Yii :: T () di mana anda memerlukannya.
Itulah yang anda dapati dalam aplikasi asas. Terdapat juga contoh aplikasi
maju
yang tersedia. Ia mempunyai struktur yang agak berbeza tetapi menambah lebih banyak fungsi untuk aplikasi anda keluar dari kotak:Pengesahan Pengguna, Pengesahan dan Kata Laluan Pemulihan.
banyak telah berubah. Sesetengah perubahan mungkin mengelirukan anda pada mulanya, tetapi saya mendapati kebanyakan perubahan masuk akal dan mudah diterima. Berikut adalah beberapa perubahan yang saya dapati menarik, menyeronokkan atau membingungkan.
Keperluan PHP 5.4 membuat beberapa perubahan mungkin; Tag pendek array disediakan. Ia juga selamat untuk menggunakan tag pendek Echo dalam pandangan kerana itu tidak bergantung kepada tetapan konfigurasi lagi.
composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic
Perubahan kecil, tetapi satu anda akan berjalan dengan pantas; Sebelum ini, anda akan menggunakan Yii :: App () untuk mengakses contoh aplikasi dan komponennya. Dalam Yii 2.0 ini berubah dari fungsi statik ke pembolehubah statik Yii :: $ App.
Fungsi Terjemahan Yii :: T () masih bersama kami. Ia mengarahkan Yii untuk menggunakan komponen i18n untuk menterjemahkan teks yang dibekalkan kepada bahasa semasa yang digunakan. Anda juga boleh mengarahkannya untuk menggantikan pembolehubah.
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
Pemformatan dan penggayaan tempat letak telah diolah semula dengan serius membolehkan pilihan pemformatan lebih banyak. Beberapa contoh:
<span><span><?php </span></span><span><span>$elements = array(1,2,3,4); //Yii 1.1 </span></span><span><span>$elements = [1,2,3,4]; //Yii 2.0 </span></span><span><span>?></span> </span><span><span><?php echo $someVar; ?></span> //Yii 1.1 </span><span><span><?= $someVar ?></span> //always safe to use in Yii 2.0</span>
Kerana pemformatan pemegang tempat ini, DateTimeFormatter telah hilang:
<span><span><?php </span></span><span><span>echo `Yii<span>::</span>t('app', 'Hello, {username}!', [ </span></span><span> <span>'username' => $username, </span></span><span><span>]); </span></span><span><span>?></span></span>
Fungsi ini dibekalkan oleh perpustakaan ICU. Dokumentasi Yii memanggil dokumentasi asal untuk ini: "agak misteri". Saya berani anda membacanya dan cuba memahaminya ... mari kita berharap dokumentasi Yii termasuk versi yang lebih mudah dibaca dalam masa.
Sebelum ini, AccessControl () akan menjadi fungsi pengawal anda jika anda ingin menggunakan fungsi kawalan akses YII. Dengan Yii 2.0, kawalan akses adalah sebahagian daripada tingkah laku pengawal ():
<span><span><?php </span></span><span><span>echo <span>\Yii</span>::t('app', '{n, number} is spelled as {n, spellout}', ['n' => 81]); </span></span><span><span>echo <span>\Yii</span>::t('app', 'You are {n, ordinal} in line, please hold.', ['n' => 3]); //Will echo "You are 3rd in line, please wait.". </span></span><span><span>echo <span>\Yii</span>::t('app', 'There {n, plural, =0{are no cats} =1{is one cat} other{are # cats}}!', array( </span></span><span> <span>'n' => 14, </span></span><span><span>)); </span></span><span><span>?></span></span>
Ini hampir sama dengan cara di Yii 1.1.
Saya perhatikan bahawa kod contoh (bukan rangka kerja itu sendiri!) Hilang banyak docblocks dan mempunyai banyak komen @InheritDoc. Ini bukan apa yang anda harapkan dari contoh tetapi saya menganggap bahawa ini akan ditetapkan dalam masa.
Model asas (sebelum ini cmodel) tidak banyak berubah. Senario kini membolehkan anda menukar penguatkuasaan peraturan pengesahan. Anda boleh mengubah apa yang perlu disahkan berdasarkan senario semasa anda (iaitu model dengan peraturan yang berbeza apabila digunakan dari depan atau belakang).
Activerecord yang diperolehi mengalami beberapa perubahan yang serius. Sintaks untuk mencari dengan Activerecord menjadi lebih seperti menulis pertanyaan kerana cdbcriteria hilang. Ia telah digantikan dengan ActiveQuery membuat maklumat mengambil lebih mudah:
<span><span><?php </span></span><span><span>//Previously in Yii 1.1 </span></span><span><span>Yii<span>::</span>app()->dateFormatter->formatDateTime(time(), 'medium', 'medium'); </span></span><span> </span><span><span>//In Yii 2.0 </span></span><span><span>echo <span>\Yii</span>::t('app', 'The date is {0, date, short}', time()); //uses the pre-defined 'short' notation (i18n save) </span></span><span><span>echo <span>\Yii</span>::t('app', 'The date is {0, date, YYYY-MM-dd}', time()); //or define your own notation </span></span><span><span>?></span></span>
Definisi hubungan juga berubah secara dramatik. Mari kita ambil contoh laman web dengan blogger yang menyiarkan artikel di mana pengguna mengulas. Definisi hubungan untuk jadual penulis diterangkan di bawah. Saya akan mulakan dengan bagaimana ia kelihatan dalam Yii 1.1:
composer.phar create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic
Seperti yang anda lihat, anda akan menentukan semua hubungan rekod aktif dalam pelbagai besar. Dalam Yii 2.0, anda perlu menentukan kaedah getter yang mengembalikan objek ActiveQuery untuk semua hubungan tersebut. Anda perlu menggunakan kata kunci 'melalui' dalam hubungan dengan menentukan hubungan antara jadual perantara.
anda kini mempunyai dua pilihan untuk menentukan ini; Biasanya anda akan menggunakan kaedah VIA () dalam fungsi hubungan. Anda juga boleh menentukan hubungan menggunakan kaedah viatable () jika anda hanya memerlukan data dalam jadual selepas jadual pivot. Contoh yang sama seperti di atas tetapi sekarang untuk Yii 2.0:
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
Ini adalah contoh yang agak mudah. Mendefinisikan hubungan melalui fungsi getter yang mengembalikan objek aktifkan membolehkan lebih banyak lagi. Sebagai contoh, anda boleh menambah fungsi khusus yang membuat pertanyaan untuk jawatan yang mendapat> 50 komen dengan menambahkan panggilan di mana () dalam aktif yang dikembalikan.
Penambahan yang menarik adalah kemungkinan untuk menentukan hubungan silang DBMS. Anda boleh menentukan hubungan antara misalnya MySQL dan MongoDB atau Redis dan menggunakannya dalam aplikasi anda sebagai satu objek.
Perkara utama yang perlu diperhatikan ialah $ ini tidak merujuk kepada contoh pengawal lagi. Dalam pandangan, $ ini adalah contoh objek YiiWebview. Pengawal boleh diakses melalui $ ini-> konteks.
seperti yang saya katakan sebelum ini; Php 5.4 menjadikan tag echo pendek secara konsisten tersedia. Ini menjadikan pandangan yang terdiri daripada php campuran dan html lebih mudah dibaca;
<span><span><?php </span></span><span><span>$elements = array(1,2,3,4); //Yii 1.1 </span></span><span><span>$elements = [1,2,3,4]; //Yii 2.0 </span></span><span><span>?></span> </span><span><span><?php echo $someVar; ?></span> //Yii 1.1 </span><span><span><?= $someVar ?></span> //always safe to use in Yii 2.0</span>
fungsi () dan renderpartial () juga berubah. Sebelum ia echo output yang diberikan secara automatik dan anda perlu menambah parameter tambahan untuk mendapatkan output yang diberikan sebagai rentetan. Yii 2.0 akan sentiasa mengembalikan rentetan pada render ()-seperti panggilan menjadikannya lebih konsisten dengan cara widget berkelakuan.
Sekiranya anda mempertimbangkan untuk menaik taraf permohonan Yii 1.1 anda ke Yii 2.0 dalam masa?
Bruno Škvorc baru -baru ini menulis tentang kod warisan di sini di Sitepoint. Dia berpendapat bahawa penulisan semula yang boleh dilakukan dalam 2 bulan harus dipertimbangkan - terutama jika perisian yang anda gunakan adalah kritikal perniagaan. Saya bersetuju dengannya dan akan mencadangkan anda menganggapnya jika anda merasa serius tentang permohonan anda dan ingin mengekalkannya di luar akhir hayat YII 1.1. Tetapi seperti biasa; ia bergantung pada keadaan anda.
Terdapat halaman khas yang didedikasikan untuk menaik taraf Yii di laman web Yii. Masalah terbesar, buat masa ini, adalah sambungan anda. Jika anda bergantung pada banyak sambungan, anda akan mempunyai masa yang sukar kerana ia akan mengambil sedikit masa untuk masyarakat mengambil (semula) menulis sambungan untuk Yii 2.0. Sekiranya anda seorang pro yang sebenar, anda sudah tentu melihat dengan serius pada sambungan yang anda gunakan dan pertimbangkan (semula) menulisnya.
Manual Migrasi mempunyai seksyen mengenai menjalankan Yii 1.1 dan Yii 2.0 bersama -sama dalam aplikasi. Untuk projek -projek besar ini adalah cara yang baik untuk mewujudkan laluan penghijrahan yang selamat. Migrasi kod generik anda ke Yii 2.0 dan luangkan masa anda di bahagian yang lebih kompleks atau lanjutan yang diisi.
Melangkah ke arah panduan muktamad untuk Yii 2.0 mendapat saya lebih bersemangat untuk memulakan dengan Yii 2.0. Saya sudah terpaksa menghentikan diri saya daripada menggunakannya dalam projek baru kerana saya tidak dapat mengambil risiko masalah dengan kod pra-pengeluaran.
Kualiti dokumentasi untuk YII 2.0 bertambah baik dari YII 1.1. Saya mempunyai masa yang sukar untuk memikirkan perkara ketika saya memulakan dengan YII 1.1 beberapa tahun yang lalu dan saya rasa dokumentasi lebih luas daripada sebelumnya.
Adakah anda melihat Yii 2.0 sudah atau mungkin juga membina sesuatu dengannya? Tolong beritahu kami apa yang anda jumpa. Saya ingin mengetahui pengalaman anda!
Apakah debugger Yii 2.0 dan bagaimana ia berfungsi? aplikasi anda. Ia mengumpul dan memaparkan maklumat mengenai setiap permintaan yang dibuat untuk permohonan anda, termasuk pertanyaan SQL yang dilaksanakan, data permintaan dan tindak balas, dan data masa prestasi. Anda boleh mengakses maklumat ini melalui panel di bahagian bawah halaman aplikasi anda. , yang boleh dipasang menggunakan Pengurus Pakej Komposer. Setelah dipasang, anda boleh menggunakan sambungan ini seperti ciri-ciri terbina dalam Yii. Komuniti Yii telah membangunkan pelbagai sambungan yang menyediakan fungsi tambahan, seperti pengesahan pengguna, pengesahan bentuk, dan abstraksi pangkalan data.
Bagaimana YII 2.0 Mengendalikan pengendalian ralat dan pembalakan? Ia boleh menangkap dan mengendalikan kedua -dua kesilapan dan pengecualian PHP. Kesalahan boleh dilog masuk dalam format yang berbeza dan dihantar ke destinasi yang berbeza, seperti fail, e -mel, dan penyemak imbas. berdasarkan phpunit dan selenium. Ia menyokong kedua -dua ujian unit dan ujian fungsional. Anda boleh menulis kes ujian untuk menguji model, pandangan, dan pengawal anda. Rangka kerja ujian juga menyediakan kaedah untuk mensimulasikan input pengguna dan menyemak output.
Atas ialah kandungan terperinci Apa yang diharapkan dari Yii 2.0. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!