Kamis, 04 September 2014

Yii Framework : Autoload Multiple Public Class in one File


Langsug saja, kemarin saat akan memulai project baru di tempat kerja dengan Yii Framework. Saya menemukan sebuah problem yang cukup membuat pusing hampir seharian (maklum newbie hehe). Problemnya adalah saya harus mengintegrasikan sebuah API dengan banyak class dalam satu file agar bisa dipakai didalam lingkungan Yii Framework. Seperti yang kita ketahui bahwa konvensi (aturan) untuk pembuatan class di Yii Framework adalah one public class put in on file and name of public class must be same with file name. Ceritanya berbagai cara saya coba lakukan dari memecah class kedalam file-file berbeda, menjadikannya sebuah ekstention, sampai tindakan ekstrim mengedit file YiiBase.php (biasa hasil googling) ... namun sayang masih gagal.. 
Oke fine, seperti yang kita ketahui bahwa untuk meng-autoload class di Yii Framework cukup menset config pada file main.php seperti berikut ini :


'import'=>array(
'path.to.classname' //'application.component.MyClass'
)


Beda kasus kalau dalam satu file terdapat banyak public class ( class yang bisa kita gunakan di class lain). So pasti saat kamu akan menggunakan class tersebut misalnya dalam sebuah controller akan menghasilkan sebuah php Warning yang aduhai..

Masuk ke solusi, singkatnya saya menemukan sebuah pencerahan dari sahabat sejati programmer newbie kaya saya (sebut saja stackoverflow). kurang lebih caranya adalah saya meggunakan fungsi spl_autoload_register .

1. Buat file autoload.php (misal di folder vendor)

spl_autoload_register(function($className) {

static $classMap;

if (!isset($classMap)) {

$classMap = require __DIR__ . DIRECTORY_SEPARATOR . 'classmap.php';

}

if (isset($classMap[$className])) {

include $classMap[$className];

}

});



2. Buat file classmap.php ( letakkan satu dir dengan autoload.php, file ini yang mendaftarkan nama public class dan nama file dimana ia berada)

/**


* A map of classname => filename for SPL autoloading.

*/

$mainDir = __DIR__ . DIRECTORY_SEPARATOR . 'main' . DIRECTORY_SEPARATOR;

$childDir = $mainDir . 'child' . DIRECTORY_SEPARATOR;

return array(

'MyClassName1' => $mainDir . 'filename1.php',

'MyClassName2' => $mainDir . 'filename1.php',

'MyClassName3' => $childDir . 'filename2.php',

'MyClassName4' => $childDir . 'filename2.php',

);


3. Edit file index.php ( require file autoload.php sebelum yii.php)

// change the following paths if necessary


$yii=dirname(__FILE__).'/../yii/framework/yii.php';

$config=dirname(__FILE__).'/protected/config/main.php';


// remove the following lines when in production mode

//defined('YII_DEBUG') or define('YII_DEBUG',true);

// specify how many levels of call stack should be shown in each log message

//defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);


require '/protected/vendor/autoload.php';

require_once($yii);


Yii::createWebApplication($config)->run();




4. Oke coba deh gunakan class yang udah kita autoload (misalnya di contoller)

class MyController extends Controller {


public function actionIndex(){

$tw = new MyClassName2();

$tw->myMethod();

}

}


5. Berhasil.. hore - hore...


Mungkinkah ada solusi lain, ditunggu sarannya pada kotak komentar ? apakah dengan composser, dan sebagainya....

Sekian postingan saya kali ini.. semoga bermanfaat..

NB: Sekedar catatan pribadi.
API yang dipakai pada project ini gak support composser.. ya sudahlah..


Rabu, 16 April 2014

Belajar pemrograman C# dengan mengembangkan game menggunakan Unity 3D

Sudah lama kali aku tak posting blog ini... kebetulan energi untuk menulis sedang menggebu-gebu nih !. Ya udin dari pada disalurkan buat nulis status gak jelas dan gak penting, mending  saya manfaatkan sahajalah untuk nulis post ini. moga aja ada manfaatnya gitu...hex hex hex.

Singkat cerita, akhir-akhir ini saya sedang focus belajar mebuat game (tak tahulah, entah kebawa trend atau apa gitu). Yang jelas tujuan saya membuat game bukan sekedar untuk hiburan tapi juga untuk pendidikan (education) dan syi'ar Islam (serius bro). Setelah mencoba berbagai tools (engine dan framework game) saya  mulai mencari tahu dan berlajar tentang berbagai bahasa pemrograman seperti JavaScript, Java, dan akhirnya bertemu C# ketika mencoba game engine Unity3D.

Begitulah saya, sebagai programmer general ( istilah yang didapat ketika ikut seminar PHP Indonesia) yang tidak fanatic dengan satu tools, saya sangat tertarik belajar berbagai tools walaupun tools yang satu belum benar-benar dikuasai dengan seutuhnya (resiko menjadi programmer general).

Back to Topic.. Beruntungnya saya ketika mencoba belajar Unity3D banyak sekali referensi ataupun tutorial baik itu berupa artikel, e-book, atau video di "samudera internet". Salah satu dari referensi yang saya dapatkan adalah sebuah e-book dengan title "Learning C# by Developing Games with Unity3D" karya Terry Norton yang terdiri dari 11 Chapter. Bagi saya e-book ini benar-benar magic karena sebagai newbie dalam C# dan Unity 3D, pada Chapter 1 saya belajar bagaimana merubah paradigma (cara pandang) saya tentang pemrograman komputer yang dipandang oleh kebanyakan orang susah dan lama untuk dipelajari dan mustahil untuk dipahami. Jelas cara pandang seperti itu adalah salah dan tidak beralasan, karena pada dasarnya semua orang memiliki keterampilan untuk melakukan pemrograman komputer hanya saja dia tidak menyadarinya dan tidak mau mencoba. 
Di Chapter 2 saya belajar dasar-dasar tentang variabel, method, dan class  dalam Unity Scripting using C#. Di Chapter 3 saya memahami lebih jauh tentang variabel dalam Unity Scripting using C#. Di Chapter 4 saya memahami lebih jauh tentang method dalam Unity Scripting using C#.

Sampai saat saya menulis tulisan ini saya baru menyelesaikan 4 Chapter . dan sedang membaca Chapter berikutnya.
Note : Maaf saya tidak menyediakan link untuk download e-book ini.. coba cari di si mbah aja.
To Be Continued... 

Selasa, 15 April 2014

Bingung Mau Posting Apa

Entah ada angin apa, hari ini saya tergerak untuk membuka dashboard blog dan menulis postingan di blog yang tak terurus ini.. Setelah seluruh postingan dalam blog ini saya ekspor ke blog yang lain (3ke4.blogspot.com), blog ini mejadi hampa tanpa ada isinya.. cekekeke

 

© 2013 Yuda Blog. All rights resevered. Designed by Templateism

Back To Top