Form & View




Form

Form


  • HTML forms are used to pass data to a server.

  • An HTML form can contain input elements like text fields, checkboxes, radio-buttons, submit buttons and more. A form can also contain select lists, textarea, fieldset, legend, and label elements.


                     

User Name:

Password:

Form




echo Form::open(array('url' => 'foo/bar'));

echo Form::close;





파라미터가 array니까 뭐가 더 들어갈수 있을꺼 같다고생각하실 양파님을 위해서 준비한..



echo Form::open(array('url' => 'foo/bar', 'method' => 'put'));


네.. 메쏘드 지정 가능합니다!

또 뭐가 되는지는 저도 잘..





echo Form::open(array('route' => 'route.name'))

echo Form::open(array('action' => 'Controller@method'))

CSRF-1


크로스사이트 위조 방지

  • 사이트 간 요청 위조(또는 크로스 사이트 요청 위조, 영어: Cross-site request forgery, CSRF, XSRF)는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다. 


  •  특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다. 즉, 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면 이후에는 사용자의 행동과 관계 없이 사용자의 웹 브라우저와 공격 대상 웹사이트 간의 상호작용이 이루어진다. (공격자의 의도에 따라 제 3의 웹사이트가 추가될 수도 있다.)

CSRF-2


  1. 이용자는 웹사이트에 로그인하여 정상적인 쿠키를 발급받는다
  2. 공격자는 다음과 같은 링크를 이메일이나 게시판을 통해 이용자에게 전달한다.
  3. http://www.geocities.com/attacker
  4. 공격용 HTML 페이지는 다음과 같은 이미지태그를 가진다.
  5. <img src= "https://travel.service.com/travel_update?.src=Korea&.dst=Hell">
  6. 해당 링크는 클릭시 정상적인 경우 출발지와 도착지를 등록하기위한 링크이다. 위의 경우 도착지를 변조하였다.
  7. 이용자는 아무런 생각없이 공격용 URL을 클릭하여 해당페이지로 이동한다.
  8. 이용자의 승인이나 인지 없이 출발지와 도착지가 등록이 된다. 웹 브라우저가 공격용 페이지를 보여주는 과정에서 이미지를 받으려고 시도하게 되며, 이런 과정에서 이용자의 정상적인 쿠키가 정상적인 페이지로 요청시 원래의 서비스 페이지에 전달된다. 해당 서비스 페이지는 등록 과정에 대해 단순히 쿠키를 통한 본인확인 밖에 하지 않으므로 공격자가 정상적인 이용자의 수정이 가능하게 된다.

CSRF-3



간편하게 할 수 있음.

BaseController에 Construct에다가..

$this->beforeFilter('csrf', array('on' => array('post', 'put', 'patch', 'delete')));

요거 추가.. 끝!

Form::XXX




Form안에 항목들을 생성해주는 메소드들

(label, text, checkbox, file, select, button)

ex) echo Form::text('username');

Macro(=Custom)

  • helper or autoload position.. etc
Form::macro('myField', function(){
return '<input type="awesome">';
})
  • View
{{ Form::myField() }}

Form Model binding




모델의 컨텐츠를 기반으로 폼을 채우길 원할 때도 있습니다. 이렇게 하려면, Form::model 메소드를 사용합니다.

모델을 이용하기 위해서는 모델을 알아야합니다.

Form Model binding


http://www.youtube.com/watch?v=EJwxG3b9j9c


이거는 model 할때 보세요..


지금 보지 마세요.
모델에 양보하세요.




View


MVC에서 V에 해당하는 View!

View



어플리케이션의 HTML을 포함하고 프리젠테이션 로직에서 컨트롤러와 도메인 로직을 분리하는 편리한 방법을 제공.





 뷰는 app/views 디렉토리에 있습니다.

Value binding



View::make('greeting', array('name' => 'Taylor'));

View::make('greeting')->with('name', 'Steve');

Share data


모든 뷰에 데이터를 share하는 개념.
그냥.. construct에 넣어서 쓰니까 됨.

View::share('name', 'Steve');

Sub-view



$view = View::make('greeting')->nest('child', 'child.view');

$view = View::make('greeting')->nest('child', 'child.view', $data);


상위 뷰 greeting에서 변수명으로 출력 
<?php echo $child; ?>

View-composer


  • 뷰가 렌더링 될때 호출되는 콜백이나 클래스 메소드. 

  • 어플리케이션을 통해 특정한 뷰가 렌더링 될때마다 바인딩 할 데이터가 있을 경우, 뷰 컴포저가 그 코드를 한곳에서 편성할수 있습니다. 따라서, 뷰 컴포저는 뷰 모델이나 프레젠터처럼 작동할수 있습니다.



View::composer('profile', function($event)
{
    $event->view->with('count', User::count());
});

이렇게 정의하고.. 여러개 지정 가능

View::composer('profile, dashboard', function($event)
{
    $event->view->with('count', User::count());
});

메뉴얼에는 view composer class얘기가 또 나오는데 걔는 IoC Container 나오는 어려운 얘기라서 패쓰.




Blade template



why use template engine


<ul>
  <?php foreach $users as $user : ?>
  <li><?php echo $user->name; ?></li>
  <?php endforeach; ?>
</ul>

<ul>
  @foreach ($users as $user)
  <li>{{ $user->name }}</li>
  @endforeach
</ul>






모든 블레이드 템플릿은 .blade.php 확장자를 사용해야 합니다.

List



  1. Define section
  2. Extends view
  3. Echo escaping
  4. Ifs
  5. Loop
  6. Include

Define section


    <nav class="navigation">
      @section('navigation')
        <a href="/">Home</a>
        <a href="/about">About</a>
      @show
    </nav>
 
    <div class="container">
       @yield('content')
    </div>
     
    <div class="sidebar">
       @yield('sidebar')
    </div>

    Extends view


    @extends('layouts.master')
     
    @section('content')
      <p>This will be overwritten</p>
    @stop
     
    @section('sidebar')
      @parent
       
      <a href="#">Section specific links</a>
    @stop

      Echo escaping



        Hello <?php echo $name; ?>

        Hello {{ $name }}

        {{{ $name }}}

          Ifs


          @if (count($records) === 1)
              I have one record!
          @elseif (count($records) > 1)
              I have multiple records!
          @else
              I don't have any records!
          @endif

          @unless (Auth::check())
              You are not signed in.
          @endunless

          Loop

          For
          @for ($i = 1; $i < 100; $i++)
            <li>{{ $i }} ... </li>
          @endfor

          Foreach
          @foreach ($users as $user)
            <li>This is user {{ $user->name }}</li>
          @endforeach

          While
          @while (true)
            <p>I have no good reason to use this.</p>
          @endwhile

            Include




            @include('view.name')

            @include('view.name', array('some'=>'data'))

            Input

            By xesper

            Input

            • 635