라라벨, laravel 로 샘플 만들어 보자. (4)(end) view , controller

3 minute read

controller 수정

app\Http\Controllers\SimpleCommentController.php

<?php
<br></br>
namespace App\Http\Controllers;
<br></br>
use App\SimpleComment;
use Illuminate\Http\Request;
<br></br>
class SimpleCommentController extends Controller
{
  /**
  * Display a listing of the resource.
  *
  * @return \Illuminate\Http\Response
  */
  public function index()
  {
    return [
      'result'=>true,
      'count' => SimpleComment::count(),
      'simpleComments' => SimpleComment::lists(),
    ];
    // return View('sc/index');
    //
  }
  
  /**
  * Store a newly created resource in storage.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return \Illuminate\Http\Response
  */
  public function store(Request $request)
  {
    //
  }
  
  /**
  * Display the specified resource.
  *
  * @param  \App\SimpleComment  $simpleComment
  * @return \Illuminate\Http\Response
  */
  public function show(SimpleComment $simpleComment)
  {
    //
  }
  
  /**
  * Update the specified resource in storage.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \App\SimpleComment  $simpleComment
  * @return \Illuminate\Http\Response
  */
  public function update(Request $request, SimpleComment $simpleComment)
  {
    if(!$simpleComment->checkScPass($request->input('sc_pass'))){
      return [
        'result'=>false,
        'message'=>'Incorrect password',
      ];
    }
    $simpleComment->update($request->all());
    return $this->index();
}
  
  /**
  * Remove the specified resource from storage.
  *
  * @param  \App\SimpleComment  $simpleComment
  * @return \Illuminate\Http\Response
  */
  // $request 를 추가, 제어 역전으로 알아서 데이터를 전달 해 준다.
  public function destroy(Request $request, SimpleComment $simpleComment)
  {
    if(!$simpleComment->checkScPass($request->input('sc_pass'))){
      return [
        'result'=>false,
        'message'=>'Incorrect password',
      ];
    }
    $simpleComment->delete();
    return $this->index();
  }

}

API쪽 route 수정 (경로가 모델명에 안 맞으면 컨트롤러에서 모델을 제대로 못 가져옮)

routes\api.php

<strike>Route::resource('sc', 'SimpleCommentController');</strike>
Route::resource('simpleComment', 'SimpleCommentController');

web 쪽 route 추가

routes\web.php Route::any('/sc','WebSimpleCommentController@index');

web 쪽 controller 추가

app\Http\Controllers\WebSimpleCommentController.php
<?php
<br></br>
namespace App\Http\Controllers;
<br></br>
use Illuminate\Http\Request;
<br></br>
class WebSimpleCommentController extends Controller
{
	protected $title='SimpleComment';
    public function index($value='')
    {
    	return View('sc.lists',['title'=>$this->title]);
    }
}

web 쪽 view 파일

resources\views\sc\lists.blade.php

<code style="font-size: 12.6px;">@extends('sc.master')
<br></br>
@section('title', $title)
<br></br>
@section('content')
	<h1>SimpleComment</h1>
	<div id="sc_app">
		<ul class="list-group"  v-for="sc in res.simpleComments">
			<li class="list-group-item">
				<form onsubmit="ajax_action.action(this);return false;" action="">
					
					<input type="text" name="_method" disabled value="" />
					<input type="text" name="sc_id" readonly v-model="sc.sc_id" />
					<input type="password" name="sc_pass"/>
					<input type="text" name="sc_name" v-model="sc.sc_name" />
					<input type="text" name="sc_comment" v-model="sc.sc_comment" />
					<input disabled type="created_at" v-model="sc.created_at" />
					<input disabled type="updated_at" v-model="sc.updated_at" />
					<button onclick="this.form._method.value='PUT'">modify</button>
					<button onclick="this.form._method.value='DELETE'">delete</button>
<br></br>
				</form>
			</li>
		</ul>	
	</div>
	<script>
	window.Laravel = {!! json_encode([
	 'csrfToken' => csrf_token(),
	]) !!};
        // vue.js의 app을 생성
	var sc_app = new Vue({
		el: '#sc_app',
		data: {
			res:{'result':null,message:'','count':0,'simpleComments':[]},
		}
	})
	$(function(){
		ajax_action.lists();
	})
	var ajax_action = {
		"lists":function(){
			var url = "";
			$.ajax({
				url: url,
				type: 'GET', //GET
				dataType: 'json', //xml, json, script, jsonp, or html
				// data: post_data,
			})
			.done(function(rData) { //통신 성공 시 호출
				console.log("success");
				if(!rData.result){
					alert(rData.message)
				}else{
					sc_app.res = rData;
				}
			})
			.fail(function() { //통신 실패 시 호출
				console.log("error");
			})
			.always(function() { //성공/실패 후 호출.
				console.log("complete");
			});
		},
		"action":function(f){
			var url = f.action.replace(":sc_id",f.sc_id.value);
			var post_data = $(f).serialize();
			$.ajax({
				url: url,
				type: f._method.value, //GET
				dataType: 'json', //xml, json, script, jsonp, or html
				data: post_data,
			})
			.done(function(rData) { //통신 성공 시 호출
				console.log("success");
				if(!rData.result){
					alert(rData.message)
				}else{
					sc_app.res = rData;
				}
			})
			.fail(function(e) { //통신 실패 시 호출
				console.log(e);
			})
			.always(function() { //성공/실패 후 호출.
				console.log("complete");
			});
			f._method.value = '';
		}
	}
	</script>
<br></br>
	<code style="white-space:pre">
	API LISTS
	+--------+-----------+------------------+------------+------------------------------------------------------+------------+
	| Domain | Method    | URI              | Name       | Action                                               | Middleware |
	+--------+-----------+------------------+------------+------------------------------------------------------+------------+
	|        | GET|HEAD  | api/sc           | sc.index   | App\Http\Controllers\SimpleCommentController@index   | api        |
	|        | POST      | api/sc           | sc.store   | App\Http\Controllers\SimpleCommentController@store   | api        |
	|        | GET|HEAD  | api/sc/create    | sc.create  | App\Http\Controllers\SimpleCommentController@create  | api        |
	|        | GET|HEAD  | api/sc/{sc}      | sc.show    | App\Http\Controllers\SimpleCommentController@show    | api        |
	|        | PUT|PATCH | api/sc/{sc}      | sc.update  | App\Http\Controllers\SimpleCommentController@update  | api        |
	|        | DELETE    | api/sc/{sc}      | sc.destroy | App\Http\Controllers\SimpleCommentController@destroy | api        |
	|        | GET|HEAD  | api/sc/{sc}/edit | sc.edit    | App\Http\Controllers\SimpleCommentController@edit    | api        |
	+--------+-----------+------------------+------------+------------------------------------------------------+------------+
	</code>
@endsection
<br></br>

🔗original-link

Updated: