laravel 프레임 워 크 학습 기록 의 폼 작업 상세 설명

7252 단어 laravel폼 조작
본 논문 의 사례 는 laravel 프레임 워 크 학습 기록 의 폼 작업 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
1.MVC 데이터 흐름
laravel 프로젝트 를 가 져 오 는 가장 기본 적 인 것 은 페이지 요청,데이터 흐름 이 어떻게 진행 되 는 지 알 아 보 는 것 입 니 다.예 를 들 어 get 을 통 해 index 페이지 를 요청 할 때 다음 과 같은 학생 정보 목록 을 어떻게 표시 하 는 지 알 아 보 는 것 입 니 다.

먼저 페이지 요청 이 도 착 했 을 때 routes/web.php 에서 경로 요청 과 대응 하 는 처리 방법 을 정의 해 야 합 니 다.

Route::get('index','StudentController@getIndex');

그리고.env 파일 에 데이터베이스 연결 을 설정 하고 새 데이터베이스 모델 Student 는 app/디 렉 터 리 에 놓 고 해당 하 는 데이터 시트 를 student 으로 지정 합 니 다.

class Student extends Model
{
  protected $table='student';       //     
  protected $fillable=['name','age','sex'];  //       
}

제어 클래스 StudentController 를 새로 만 들 고 getIndex 방법 을 실현 합 니 다.getIndex 방법 에서 student/index.blade.phop 페이지 를 호출 하고 Student 모델 을 통 해 학생 정 보 를 view 에 전달 합 니 다.

public static function getIndex(){
  return view('student.index',['students'=>Student::paginate(5)]);
}

페이지 보 기 를 실현 합 니 다.resources/views 폴 더 에 새 student 폴 더 를 만들어 student 관련 페이지 를 저장 합 니 다.
템 플 릿 의 사고방식 으로 index 페이지 를 실현 합 니 다.새 페이지 의 템 플 릿 파일 layot.blade.php 파일 은 그 중의 공공 부분 을 보존 하고 그 중의 다른 부분 을@section 또는@yield 로 대체 합 니 다.새 index.blade.php 는 layot 템 플 릿 의 공공 부분 을 계승 하고 index 페이지 의 사용자 정의 부분 을 실현 합 니 다.

@extends('student.layout')
@section('title')
    
  @stop
@section('content')
  <!-- index       -->
  @stop
             @foreach              
@foreach($students as $student)
  <tr>
    <th scope="row">{{$student->id}}</th>
    <td>{{$student->name}}</td>
    <td>{{$student->age}}</td>
    <td>{{$student->sex}}</td>
    <td>{{$student->created_at}}</td>
  </tr>
@endforeach

이렇게 하면 사용자 가 get 을 통 해 index 페이지 를 요청 할 때 학생 데 이 터 는 데이터베이스 에서 꺼 내 페이지 에 보 여 줍 니 다.
2.blade 에 페이지 자원 파일 도입
보기 파일 은 resources/views 디 렉 터 리 에 있 지만 blade 파일 컴 파일 이 완료 되면 Public 디 렉 터 리 에 있 기 때문에 디 렉 터 리 는 Public 에 비해 페이지 에 필요 한 정적 자원 을 Public 디 렉 터 리 에 두 고 asset 함 수 를 통 해 Public 경로 에 도입 해 야 합 니 다.
laravel 은 기본적으로 boottstrap 과 jquery 를 제공 합 니 다.각각 Public/css/app.css 와 Public/js/app.js 파일 에 대응 합 니 다.필요 하 다 면 도입 할 수 있 습 니 다.

<!-- Bootstrap CSS    -->
<link rel="stylesheet" href="{{ asset('./css/app.css')}}" rel="external nofollow" >
<!-- jQuery    -->
<script src="{{ asset('./js/app.js')}}"></script>
3.laravel 에서 페이지 나 누 기
laravel 에서 페이지 데이터 디 스 플레이 를 편리 하 게 실현 할 수 있 습 니 다.첫 번 째 단 계 는 controller 에서 페이지 를 나 누 어 데이터 베 이 스 를 추출 하여 페이지 에 전달 하 는 것 입 니 다.

return view('student.index',['students'=>Student::paginate(5)]);

두 번 째 부분 은 페이지 에 페이지 라벨 을 렌 더 링 합 니 다.

<ul class="pagination pull-right">
  {{$students->render()}}
</ul>

4.폼 검증
laravel 은 사용자 가 제출 한 폼 이 요구 에 부합 되 는 지 검증 하 는 vaidate 방법 을 제공 합 니 다.예 를 들 어 페이지 에서 post 를 통 해 학생 폼 폼 을 제출 한 후 contrller 에서 먼저 검증 하고 정확 하면 데이터 베 이 스 를 저장 합 니 다.그렇지 않 으 면 이전 페이지 로 돌아 가 이상$errors 를 던 져 페이지 에 오류$errors 의 정 보 를 표시 합 니 다.

//    
$request->validate([
  'Student.name'=>'required|max:10',
  'Student.age'=>'required|integer',
  'Student.sex'=>'required',
],[
  'required'=>':attribute    ',
  'max'=>':attribut    ',
  'integer'=>':attribute       '
],[
  'Student.name'=>'  ',
  'Student.age'=>'  ',
  'Student.sex'=>'  '
]);
//      
$stu=$request->input('Student');
Student::create($stu);

vaidate()의 첫 번 째 배열 에서 필드 를 정의 하 는 인증 규칙 입 니 다.그 중에서Student.name은 제출 한 폼 에서 정 의 된 name 입 니 다.

input type="text" name="Student[name]" placeholder="       ">
required 는 당신 이 필요 로 하 는 검증 규칙 입 니 다.중간 에"|"로 구분 합 니 다.상세 한 규칙 은 볼 수 있 습 니 다문서.
vaidate()두 번 째 배열 사용자 정의 인증 오류 후 알림 정보,":attribute"는 자리 표시 자 입 니 다.
vaidate()세 번 째 배열 은 필드 마다 알림 이름 을 사용자 정의 합 니 다.
페이지 에서 다음 과 같이 오 류 를 보고 합 니 다.
$errors->all()를 통 해 모든 오 류 를 가 져 온 후 반복 해서 표시 할 수 있 습 니 다.

@if(count($errors))
  <div class="alert alert-danger">
    <ul>
      @foreach($errors->all() as $error)
        <li>{{$error}}</li>
        @endforeach
    </ul>
  </div>
  @endif

지정 한 필드 의 인증 오 류 를 가 져 올 수도 있 습 니 다.입력 상자 마다 표시 합 니 다.

<p class="form-control-static text-danger">{{$errors->first('Student.name')}}</p>

인증 이 실 패 했 을 때 폼 페이지 로 돌아 가면 사용자 의 원래 입력 정보 가 사라 집 니 다.다시 한 번 작성 해 야 합 니 다.old 방법 으로 사용자 의 원래 입력 을 표시 할 수 있 습 니 다.

<input type="text" name="Student[name]" value="{{old('Student')['name']}}" >

5.오류 기록
①、 MethodNotAllowedHttpException No message
이 오 류 는 폼 의 post 요청 을$errors->first()정 의 된 경로 로 보 냈 기 때 문 입 니 다.post 요청 을 처리 하지 않 고 경로Route::get()를 통 해 정의 할 수 있 습 니 다.
②、Action App\Http\Controllers\StudentController@delete not defined
이 오 류 는 Blade 페이지 에서 action 으로 이동 을 요청 하 는 데 발생 했 습 니 다.이 Controller 를 찾 을 수 없습니다.

<a href="{{action('StudentController@delete',['id'=>$student->id])}}" rel="external nofollow" >  </a>

그러나 내 가 routes/web.php 에 이 방법 을 등록 한 후에 오 류 를 보고 하고 사 라 졌 다.

Route::get('delete/{id}','StudentController@delete');
③、The page has expired due to inactivity. Please refresh and try again.
이것 은 laravel 이 CSRF 크로스 오 버 공격 을 방지 하기 위해 자동 으로 설정 되 어 있 기 때문에 폼 에Route::Match(['get','post'],)를 추가 하여 laravel 이 요청 한 발기인 과 폼 제출 자가 같은 사람 이라는 것 을 알려 야 합 니 다.

<form class="form-horizontal" method="post" action="{{url('student/create')}}">
  {{ csrf_field() }}

더 많은 Laravel 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.,,,,,Laravel 프레임 워 크 입문 및 진급 튜 토리 얼
본 고 는 Laravel 프레임 워 크 를 바탕 으로 하 는 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기