menu

Showing posts with label Laravel-Chapter3. Show all posts
Showing posts with label Laravel-Chapter3. Show all posts

Laravel - Membuat halaman buku


Akhirnya kita sampai pada halaman terakhir pada chapter 3 Laravel, kali ini saya akan membagikan sebuah tutorial untuk membuat sebuah halaman buku pada website laravel menggunakan script.

Tutorial ini sangat berguna saat kita akan membuat sebuah halaman yang penuh dengan text, dan untuk mempermudah user dalam navigasi halaman tersebut maka harus dibuat sebuah link pada daftar isi agar saat link diklik akan langsung menuju bab atau bagian yang ingin dibaca tanpa harus scroll manual.

Oke langsung saja kita mulai tutorialnya,

Pertama, buat root baru pada path protected/app/routes/web.php dengan menambahkan code dibawah pada file web.php
.
.
.
//////////
// BOOK //
//////////
Route::get('book', 'Controller\BookController@Index');

Selanjutnya buat controller baru dengan nama BookController.php pada path protected/app/controllers/ dan isikan code berikut,
<?php namespace Controller;

use \View;

Class BookController Extends \BaseController
{
 Public function Index()
 {
  return View::make('book');
 }
}

Jangan lupa setelah membuat class baru kita harus mengcompilenya dengan cara,
masuk ke path protected terlebih dahulu kemudian ketikan syntax.
php composer.phar dump-autoload

Kemudian edit sedikit file master.blade.php pada path protected/app/views/layouts/web/ menjadi seperti ini,
<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 
 <title>
  @if($title)
   {{ $title }}
  @else
   Codedoct.com
  @endif
 </title>

 <!-- Custom Style -->
 @section('style')
 @show
 {{ HTML::style('public/css/master/main.css') }}

 <!-- Custom Scripts -->
 @section('script')
 @show

</head>
<body>
 @include('layouts.web.header')
 @yield('content')
 @include('layouts.web.footer')
</body>
</html>

Setelah itu buat file view baru dengan nama book.blade.php pada path protected/app/views/book.blade.php isikan code berikut,
@extends('layouts/web/master')

<?php $title = "Book" ?>

@section('style')
 {{ HTML::style('public/css/book.css') }}
@stop

@section('script')
 <script>
 //offset anchor tags with fixed header and smooth scroll
 $(function() {
   $('a[href*=#]:not([href=#])').click(function() {
     if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') 
 && location.hostname == this.hostname) {

       var target = $(this.hash);
       target = target.length ? target : $('[name=' + this.hash.slice(1) +']');
       if (target.length) {
         $('html,body').animate({
           scrollTop: target.offset().top - 60 //offset height
         }, 500);
         return false;
       }
     }
   });
   //Executed on page load with URL containing an anchor tag.
   if($(location.href.split("#")[1])) {
       var target = $('#'+location.href.split("#")[1]);
       if (target.length) {
         $('html,body').animate({
           scrollTop: target.offset().top - 60 //offset height
         }, 500);
         return false;
       }
     }
 });

 </script>
@stop

@section('content')
<div class="daftar-isi">
 <h2>My Book</h2>
 <ul>
  <li><a href="#test1">Test 1</a></li>
  <li><a href="#test2">Test 2</a></li>
  <li><a href="#test3">Test 3</a></li>
  <li><a href="#test4">Test 4</a></li>
 </ul>
</div>

<!-- Begin book -->
<div class="book">
 <div id="test1">
  <h4>Test 1</h4>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
 </div>

 <div id="test2">
  <h4>Test 2</h4>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
 </div>

 <div id="test3">
  <h4>Test 3</h4>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
 </div>
 
 <div id="test4">
  <h4>Test 4</h4>
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.

  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ullam saepe voluptatem veritatis expedita nihil dolores, distinctio aperiam. Necessitatibus vitae molestias natus fugiat rerum sequi enim nam, nesciunt, et quam asperiores.
 </div>
</div>
@stop

Kemudian buat file scss baru dengan nama book.scss pada path public/css/book.scss isikan code berikut,
.daftar-isi{
 margin-top: 20px;
 padding: 20px 2%;
 text-align: left;
 width: 96%;
 border-radius: 5px;
 background-color: white;
 border: 1px solid #e1e8ed;
 overflow: auto;
}

.book{
 margin-top: 20px;
 padding: 20px 2%;
 text-align: left;
 width: 96%;
 border-radius: 5px;
 background-color: white;
 border: 1px solid #e1e8ed;
 overflow: auto;
}

Jangan lupa setelah membuat dan mengedit file sass kita harus mengcompilenya, tutorial sass bisa lihat disini.

Setelah itu buat link baru untuk menuju ke view book.blade.php dengan mengedit sedikit file header.blade.php pada path protected/app/views/layouts/web/ menjadi seperti ini.
.
.
.
  <div class="dropdown">
     <button class="button">Menu(css)</button>
     <div class="dropdown-content">
       <a href="{{ URL::to('crud/users')}}">User</a>
       <a href="{{ URL::to('book')}}">Index Book</a>
       <a href="#">Link 3</a>
     </div>
   </div>
.
.
.

Sehingga hasil akhirnya akan tampak seperti ini.


===DONE!===

Laravel - Unit Test


Unit test merupakan bagian terpenting saat anda membuat sebuah project besar, fungsi dari unit test merupakan memastikan atau mengecheck apakah coding anda berjalan dengan baik sebagaimana semestinya.

Dalam unit test sendiri kita akan membuat sebuah sistem dimana saat coding dijalankan jika coding success maka akan menghasilkan apa, begitu juga jika coding fail maka akan menghasilkan apa.

Proses ini bertujuan untuk mengurangi terjadinya bugs pada suatu project yang sedang kita buat.

Tutorial ini meneruskan tutorial sebelumya tentang Laravel - Grouping Route 2.

Oke langsung saja kita mulai membuat sebuah unit test pada project yang sudah dibuat sebelumnya pada website ini.

Pertama buat configurasi terlebih dahulu database yang akan kita gunakan untuk unit test ini.
Buat file baru bernama database.php pada path protected/app/config/testing dan isikan code berikut,
<?php

return array(

 /*
 |--------------------------------------------------------------------------
 | Database Connections
 |--------------------------------------------------------------------------
 |
 | Here are each of the database connections setup for your application.
 | Of course, examples of configuring each database platform that is
 | supported by Laravel is shown below to make development simple.
 |
 |
 | All database work in Laravel is done through the PHP PDO facilities
 | so make sure you have the driver for your particular database of
 | choice installed on your machine before you begin development.
 |
 */

 'connections' => array(

  'mysql' => array(
   'driver'    => 'mysql',
   'host'      => 'localhost',
   'database'  => 'project-blog-testing',
   'username'  => 'root',
   'password'  => 'root',
   'charset'   => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix'    => '',
  ),

  'pgsql' => array(
   'driver'    => 'mysql',
   'host'      => 'localhost',
   'database'  => 'project-blog-testing',
   'username'  => 'root',
   'password'  => 'root',
   'charset'   => 'utf8',
   'collation' => 'utf8_unicode_ci',
   'prefix'    => '',
  ),

  'sqlite' => array(
   'driver'   => 'sqlite',
   //'database' => ':memory:',
   'database' => app_path() . '/database/testing.sqlite',
   'prefix'   => ''
  ),

 ),
);

Setelah itu buat database baru pada phpmyadmin bernama project-blog-testing(sesuai dengan configurasi database.php yang sudah kita buat), seperti ini.



Selanjutnya tambahkan testsuite baru pada file phpunit.xml pada path protected
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false"
>
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./app/tests/</directory>
        </testsuite>

        <testsuite name="controllers">
            <directory>./app/tests/controllers</directory>
        </testsuite>

        <testsuite name="crud">
            <directory>./app/tests/controllers/crud</directory>
        </testsuite>

        <testsuite name="create">
            <directory>./app/tests/controllers/crud/CreateControllerTest</directory>
        </testsuite>

    </testsuites>
</phpunit>

Kemudian buat file test baru bernama CreateControllerTest.php pada path protected/app/tests/controllers/crud, controllers dan crud adalah folder baru silahkan tambahkan sendiri sehingga akan tampak seperti ini.


Isikan code berikut pada file CreateControllerTest,
<?php

use Model\User;

class CreateControllerTest extends \TestCase {

    private static $setupDatabase = true;

    /**
     * Default preparation for each test
     *
     */
    public function setUp()
    {
        parent::setUp();
     
        if(self::$setupDatabase) {
            $this->setupDatabase();
        }

        \Mail::pretend(true);
    }

    /**
     * Migrates the database and set the mailer to 'pretend'.
     * This will cause the tests to run quickly.
     *
     */
    private function setupDatabase()
    {
        fwrite(STDERR, print_r("\n\n--- Initializing Migration and Seeding DB ---\n", TRUE));
        
        Artisan::call('migrate');
        $this->seed();

        self::$setupDatabase = false;

        fwrite(STDERR, print_r("--- End Migration and Seeding DB ---\n\n", TRUE));
    }

    //begin test
    //test koneksi ke route
    public function testConnectionRoute()
    {
        $crawler = $this->client->request('GET', 'crud/create');

        $this->assertTrue($this->client->getResponse()->isOk());
    }

    //test view pada route crud/create
    public function testCreateUser()
    {
        $crawler = $this->client->request('GET', 'crud/create');
        
        $this->assertCount(1, $crawler->filter('td:contains("Name")'));
        $this->assertCount(1, $crawler->filter('td:contains("Username")'));
        $this->assertCount(1, $crawler->filter('td:contains("Email")'));
        $this->assertCount(1, $crawler->filter('td:contains("Password")'));
    }

    //test jika berhasil menyimpan database
    public function testCreatePostUserSuccess()
    {
        $input = array(
            'name' => 'test1',
            'username' => 'Username_test',
            'email' => 'test1@mail.com',
            'password' => 'xxxxxx',
        );
        // dd($input);
        $this->call('POST', 'crud/create', $input);

        $check = User::where('name', 'test1')->first();
        $this->assertEquals('test1', $check['name']);
    }

    //test jika gagal menyimpan database karena password kurag dari 6 char
    public function testCreatePostUserFail()
    {
        $input = array(
            'name' => 'testFail',
            'username' => 'Username_test_fail',
            'email' => 'testfail@mail.com',
            'password' => 'xxx',
        );
        // dd($input);
        $this->call('POST', 'crud/create', $input);

        $check = User::where('name', 'testFail')->first();
        $this->assertNotEquals('testFail', $check['name']);
    }
}

Dapat dilihat pada code tersebut yang pertama adalah kita migrate dan seed terlebih dahulu field database unit test kemudian menjalankan testnya. Silahkan pahami sendiri comment yang sudah saya buat pada code tersebut.

Untuk menjalankannya buka terminal masuk ke path protected dan ketikkan code berikut.


===DONE!===

Laravel - Grouping Route 2


Tutorial kali ini saya akan memberikan sedikit trik pada framework Laravel, yang berguna untuk membuat struktur routing project Laravel menjadi lebih rapi.

Pada postingan sebelumnya kita sudah membuat routing group pada file routes.php, sekarang kita akan membuat routing group menjadi beberapa sebuah folder dan mengelompokkannya pada beberapa sub routes.

Langsung saja kita mulai tutorialnya.

Pertama buat folder routes pada path /protected/app dan kemudian buat file web.php pada folder routes tersebut seperti ini.


Selanjutnya pindahkan isi file routes.php (path protected/app/routes.php) pada file web.php yang baru dibuat sehingga isi file web.php yang baru akan terlihat seperti ini.
<?php

/*-----------WEB-----------*/
Route::get('/', 'HomeController@showWelcome');

//pahamilah group route dibawah
Route::group(array('prefix' => 'crud'), function(){
 Route::get('users', 'Controller\Crud\ReadController@readUsers');

 Route::get('create', 'Controller\Crud\CreateController@createUser');
 Route::post('create', 'Controller\Crud\CreateController@createpostUser');

 Route::get('update/{id}', 'Controller\Crud\UpdateController@updateUser');
 Route::post('update/{id}', 'Controller\Crud\UpdateController@updatepostUser');

 Route::get('delete/{id}', 'Controller\Crud\DeleteController@deleteUser');
});

Terakhir edit file routes.php pada path protected/app/ menjadi seperti ini.
<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/

//--------------------------WEB---------------------------
Route::group(array('prefix' => ''), function() 
{
 require app_path().'/routes/web.php';
});


Dapat dilihat pada code tersebut jika saya memasukkan url dengan prefix kosong atau '' maka route akan mengarah pada path routes/web.php

===DONE!===

Laravel - Grouping Route 1


Melanjutkan tutorial yang kemarin, pada tutorial kali ini saya akan memberikan tutorial tentang cara membuat group route pada Laravel.

Membuat group merupakan suatu trik untuk mengelompokan route menjadi beberapa kelompok sehingga memudahkan seorang developer untuk mentrack controller suatu project.

Selain memudahkan developer grouping route ini juga membuat codingan menjadi lebih rapi dan elegan.

Oke langsung saja kita mulai tutorialnya,.,.,

Pertama edit routes.php pada path protected/app/routes.php menjadi seperti ini
<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/

Route::get('/', 'HomeController@showWelcome');

//pahamilah group route dibawah
Route::group(array('prefix' => 'crud'), function(){
 Route::get('users', 'Controller\Crud\ReadController@readUsers');

 Route::get('create', 'Controller\Crud\CreateController@createUser');
 Route::post('create', 'Controller\Crud\CreateController@createpostUser');

 Route::get('update/{id}', 'Controller\Crud\UpdateController@updateUser');
 Route::post('update/{id}', 'Controller\Crud\UpdateController@updatepostUser');

 Route::get('delete/{id}', 'Controller\Crud\DeleteController@deleteUser');
});

Selanjutnya edit readUser.blade.php, createUser.blade.php, updateUser.blade.php  pada path protected/app/view/web/, masing-masing menjadi seperti ini.

readUser.blade.php
.
.
.
          <td>
           <a href="{{ URL::to('crud/update/'.$users->id) }}">Edit<br>
           <a href="{{ URL::to('crud/delete/'.$users->id) }}">Delete
          </td>
       </tr>
     @endforeach
   </table>
   <br>
   <button onclick="location.href='{{ URL::to('crud/create') }}';">Create</button>
 </div>
@stop

createUser.blade.php
.
.
.
   <tr>
    <td colspan="3">
     <br>
     <input type="submit" class="btn" value="Create">
    </td>
   </tr>
  </table>
  </form>
 </div>
@stop

updateUser.blade.php
@extends('layouts/web/master')
@section('content')
 <?php $title = "Update User" ?>
 <div class="isi">
  <form method="post" action="">
  <table>
   <tr>
    <td>Name</td>
    <td nowrap>:</td>
    <td><input type="text" name="name" value="{{ $data_user['name'] }}"><span style="color:red"><?php echo $errors->first('name') ?></td>
   </tr>
   <tr>
    <td>Username</td>
    <td nowrap>:</td>
    <td><input type="text" name="username" value="{{ $data_user['username'] }}"><span style="color:red"><?php echo $errors->first('username') ?></td>
   </tr>
   <tr>
    <td>Email</td>
    <td nowrap>:</td>
    <td><input type="text" name="email" value="{{ $data_user['email'] }}"><span style="color:red"><?php echo $errors->first('email') ?></span></td>
   </tr>
   <tr>
    <td colspan="3">
     <br>
     <input type="submit" class="btn" value="Save">
    </td>
   </tr>
  </table>
  </form>
 </div>
@stop

Kemudian edit header.blade.php pada path protected/app/view/layouts/web menjadi seperti ini.
<div class="header">
 <div class="banner">
  <div class="welcome">Welcome</div>
  {{-- code dibawah ini menggunakan constant variabel --}}
  <div class="gambar"><a href="#"><img src="{{ IMAGE_HEADER }}" style="width:"100px" height="129px";"></a></div>
 </div>
 <hr>
 <div class="menu">
  <div class="kiri">
   <li>
    <div class="dropdown">
      <button class="button">Menu(css)</button>
      <div class="dropdown-content">
        <a href="{{ URL::to('crud/users')}}">User</a>
        <a href="#">Link 2</a>
        <a href="#">Link 3</a>
      </div>
    </div>
   </li>
   <li>
     <div class="dropdown-script">
      <button onclick="myFunction()" class="dropbtn">Menu(css)</button>
      <div id="myDropdown" class="dropdown-content-script">
        <a href="{{ URL::to('crud/users')}}">User</a>
        <a href="#">Link 2</a>
        <a href="#">Link 3</a>
      </div>
     </div>
   </li>
  </div>
  <div class="kanan">
   <li onclick="location.href='{{ URL::to('/') }}';">Login</li>
   <li onclick="location.href='{{ URL::to('/') }}';">Cari</li>
  </div>
 </div>
</div>

Dan yang terakhir edit controller CreateController.php, UpdateController.php, dan DeleteController.php masing-masing seperti ini.

CreateController.php
.
.
.
     if ($validator->passes()) {
         $user           = new User;
         $user->name     = Input::get('name');
         $user->username = Input::get('username');
         $user->email    = Input::get('email');
         $user->password = Hash::make(Input::get('password'));
         $user->save();

         return Redirect::to('crud/users');
     }
     else {
      return Redirect::to('crud/create')
       ->withErrors($validator)
       ->withInput();
     }
 }
}

UpdateController.php
.
.
.
     if ($validator->passes()) {
         $user           = User::find($id);
         $user->name     = Input::get('name');
         $user->username = Input::get('username');
         $user->email    = Input::get('email');
         $user->save();

         return Redirect::to('crud/users');
     }
     else {
      return Redirect::to('crud/update/'.$id)
       ->withErrors($validator)
       ->withInput();
     }
 }
}

DeleteController.php
<?php namespace Controller\Crud;

use Model\User;
use \Redirect;

class DeleteController extends \BaseController 
{
 public function deleteUser($id)
 {
  $user = User::where('id', $id)->first();
  $user->delete();
  return Redirect::to('crud/users');
 }
}

Silahkan pahamilah sendiri apa saja yang telah kita edit dari tutorial sebelumnya,..

===DONE!===

Laravel - Composer classmap


Pada artikel kali ini kembali saya akan memberikan tutorial yang akan membuat proect laravel anda semakin elegan.,.,.

Pada sebuah project website dengan framework Laravel kita perlu membuat pengelompokan pada setiap class yang kita buat agar codingan lebih terlihat rapi.

Tutorial kali ini akan menjelaskan cara membuat foldering controller pada Laravel agar codingan terlihat lebih rapi,.,

Untuk bisa melakukan tutorial ini diharuskan anda sudah menerapkan tutorial hingga tahap ini.

Oke langsung saja kita mulai tutorialnya,

Pertama, buat folder bernama "crud" pada controller kemudian masukkan CreateController, DeleteController, ReadController, dan UpdateController kedalam folder tersebut seperti ini.


Jika kita membuka website anda dan mengklik submenu user seperti ini


Maka kita akan mendapatkan error seperti ini


Hal ini disebabkan karena kita belum membuat classmap pada route sehingga controller tidak dapat dikenali.

Selanjutnya buat classmap pada route dengan mengubah code routes.php pada path protected/app/routes.php menjadi seperti ini.
<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/

Route::get('/', 'HomeController@showWelcome');

Route::get('users', 'Controller\Crud\ReadController@readUsers');

Route::get('create', 'Controller\Crud\CreateController@createUser');
Route::post('create', 'Controller\Crud\CreateController@createpostUser');

Route::get('update/{id}', 'Controller\Crud\UpdateController@updateUser');
Route::post('update/{id}', 'Controller\Crud\UpdateController@updatepostUser');

Route::get('delete/{id}', 'Controller\Crud\DeleteController@deleteUser');

kemudian tambahkan code "namespace Controller\Crud;" pada semua controller(CreateController, DeleteController, ReadController, dan UpdateController) yang ada pada folder crud yang baru saja kita pindahkan tadi menjadi seperti ini.
<?php namespace Controller\Crud;

class ReadController extends \BaseController 
{
 public function readUsers()
 {
  $users = User::all();
  return View::make('web.readUser')->with('data_user', $users);
 }

}


Terakhir jalankan dump autoload pada terminal seperti ini.


Jika terjadi error seperti ini.


Berarti project yang kita buat belum memiliki file composer.phar silahkan download disini, jika sudah download letakkan pada path protected pada project laravel kemudian jalankan dump-autoload lagi, hingga sukses denngan tampilan seperti ini.


===DONE!===

WHY?

1. Untuk error


Ini dikarenakan file model belum di beri class juga sehingga nama model dianggap sama dengan nama file migration cara mengatasinya dengan memberi code "&lt;?php namespace Model;" pada model User.php pada path protected/app/model/User.php seperti ini



2. Untuk error


Ini hanya warning saja bukan error jika ingin menghilangkannya tinggal lakukan saja apa yang diperintahkan yaitu tetap pada path protected kemudian ketik pada terminal "php composer.phar self-update"

3. Untuk error

Tambahkan saja code "use Model\User;" 


Tambahkan saja code "use \View;" 

Pada controller ReadController.php dan misalkan pada controller lain juga muncul error tersebut maka tambahkan juga code tersebut pada controller yang error.
Ingat! setiap controller mungkin membutuhkan Model dan  Library yang berbeda jadi sesuaikan dengan kebutuhan pada saat menggunakan code "use ...........".
Misal jika dibutuhkan Validator maka tinggal tambahkan "use \Validator;"
Sehingga code controller akan menjadi seperti ini.
<?php namespace Controller\Crud;

use Model\User;
use \View;

class ReadController extends \BaseController 
{
 public function readUsers()
 {
  $users = User::all();
  return View::make('web.readUser')->with('data_user', $users);
 }

}


4. Untuk error


Tambahkan saja code "use \Eloquent;" pada model User.php. Sama seperti controller Model juga memiliki kebutuhan Library yang berbeda-beda jadi sesuaikan setiap modelnya, pada contoh diatas model User.php error karena class Model\Eloquent tidak ditemukan jadi kita tambahkan saja code "use \Eloquent;".
Sehingga code model User.php akan menjadi seperti ini.
<?php namespace Model;

use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
use \Eloquent;

class User extends Eloquent implements UserInterface, RemindableInterface {

 use UserTrait, RemindableTrait;

 /**
  * The database table used by the model.
  *
  * @var string
  */
 protected $table = 'users';

 /**
  * The attributes excluded from the model's JSON form.
  *
  * @var array
  */
 protected $hidden = array('password', 'remember_token');

}

Selebihnya silahkan pahamilah sendiri,,,
Jika ada yang kurang dimengerti atau ada error lain silahkan email(contact us) atau comment juga boleh.

Laravel - Membuat file Constant


Memiliki file constant dalam sebuah project besar laravel adalah suatu keharusan karena file constant dapat membantu mempermudah pengembangan project tersebut.

File constant meruupakan sebuah kumpulan variabel yang mewakili atau menggantikan suatu string secara global. Sehingga kita hanya perlu menuliskan variabel singkat untuk menggantikan string yang panjang.

File constant ini bersifat global sehingga kita tidak perlu mendeklarasikannya pada setiap halaman.

Jangan lupa ikuti tutorial pada website ini secara berurutan, dan untuk sampai tahap ini pastikan anda sudah menyelesaikan tutorial sampai pada tutorial ini.

Oke langsung saja kita praktekan untuk lebih jelasnya, Here we go!

Pertama buat file baru constants.php pada path protected/app seperti ini


Isi dengan code berikut
<?php
 // gambar
 define('IMAGE_HEADER', 'https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWOzEVZ-vSf8RORS5_ZF7e0ltWpkD7gFpz-rqKoBgvvfJkgG9iXS5RxO3iU-MF2TvMqhkj7tIalKW48dq7bJv1Rjk-CKPsKLG6lZGuqVAd_IbNHzZYbWDuyvy2Rji4g1VTQsejHbKskbI/s80/mata.png');

Kemudian deklarasikan file constant tersebut dengan cara menambahakan code berikut pada file protected/app/start/global.php
.
.
.
.
.
.
require app_path().'/filters.php';

// file constant
require_once app_path().'/constants.php';

App::missing(function(Exception $exception)
{
    return Response::view('web.404-not-found', array(), 404);
});

Selanjutnya ganti url header pada path


Edit file header.blade.php menjadi seperti ini
<div class="header">
 <div class="banner">
  <div class="welcome">Welcome</div>
  {{-- code dibawah ini menggunakan constant variabel --}}
  <div class="gambar"><a href="#"><img src="{{ IMAGE_HEADER }}" style="width:"100px" height="129px";"></a></div>
 </div>
 <hr>
 <div class="menu">
  <div class="kiri">
   <li>
    <div class="dropdown">
      <button class="button">Menu(css)</button>
      <div class="dropdown-content">
        <a href="{{ URL::to('users')}}">User</a>
        <a href="#">Link 2</a>
        <a href="#">Link 3</a>
      </div>
    </div>
   </li>
   <li>
     <div class="dropdown-script">
      <button onclick="myFunction()" class="dropbtn">Menu(css)</button>
      <div id="myDropdown" class="dropdown-content-script">
        <a href="{{ URL::to('users')}}">User</a>
        <a href="#">Link 2</a>
        <a href="#">Link 3</a>
      </div>
     </div>
   </li>
  </div>
  <div class="kanan">
   <li onclick="location.href='{{ URL::to('/') }}';">Login</li>
   <li onclick="location.href='{{ URL::to('/') }}';">Cari</li>
  </div>
 </div>
</div>

Dapat dilihat pada code tersebut dari url yang panjang kita ganti dengan sebuah variabel IMAGE_HEADER yang sudah kita deklarasikan pada file constants.php selebihnya silahkan pahamilah sendiri..

Tampilannya tetap sama seperti sebelum url gambar diganti dengan file constant, tapi dari sisi code ini sangat elegan..


===DONE!===

Laravel - Membuat page not found


Hello,, lama beristirahat dengan Laravel karena sibuk dengan Rails saatnya kembali berkreasi dengan PHP on Laravel.

Oke melanjutkan tutorial sebelumnya, kali saya akan share sebuah teknik untuk menampilkan halaman page not found pada website dengan framework Laravel 4.2.

Pada Laravel jika kita memasukkan sebuah URL yang salah maka akan muncul halaman error seperti ini.


Untuk sebuah website profesional tentu saja halaman ini sangat tidak enak dilihat, karena user akan beranggapan bahwa website anda error atau bugs.

Karena itu sebagai seorang programmer teruslah belajar untuk membuat sebuah sistem sesederhana mungkin dari segi interface/tampilan tapi rumit dibagian code dan yang paling penting minim atau malah tidak ada bugs sama sekali hehe..

Oke langsung saja sedikit ilmu dari dari seorang programmer amatir, Here we go!..

Pertama pastinya anda sudah membuat sebuah project website dengan menggunakan Laravel jika belum? silahkan belajar dulu sampai anda menyelesaikan tahap ini.

Jika sudah, buka path app/start/global.php


Kemudian tambahkan code berikut pada baris paling bawah seperti ini
App::missing(function(Exception $exception)
{
    return Response::view('web.404-not-found', array(), 404);
});

Kemudian buat file baru dengan nama 404-not-found.php pada path protected/app/views/web seperti ini


Dan isi dengan code terserah anda, halaman inilah yang akan ditampilkan saat Page Not Found, misal isi dengan code berikut
Page not found :D

Sehingga tampilannya jika saya masukkan URL yang salah akan terlihat seperti ini


===DONE!===