Lavarel의 첫 만남

46337 단어 php 프레임워크
하나.라우팅(https://d.laravel-china.org/docs/5.5/routing) 라우팅 형식 1.클로즈업 형식
Route::get('foo', function () {
    return 'Hello World';
});

2 기본 모드
Route::get/post/put/delete('/user', 'UsersController@index');

다양한 요청 방법 일치
    match          
Route::match(['get', 'post'], '/', function () {
    //
});


any      
Route::any('foo', function () {
    //
});

POST, PUT 또는 DELETE 요청 방식에는 CSRF 토큰이 포함되어야 합니다. 그렇지 않으면 거부됩니다.
"POST" action="/profile"> {{ csrf_field() }} ...

3 라우팅 리디렉션
Route::redirect('/here', '/there', 301);

4 뷰 라우팅
   redirect     ,              。view        ,          ,    URL      。       ,        ,             。
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

루트 매개 변수 (매개 변수는 {}에 쓰여 있으며, 알파벳 밑줄로만 명명할 수 있습니다)
필수 매개 변수
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

선택적 매개변수(매개변수 뒤에? 기호를 추가하여 기본값이 있는지 확인)
Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

뒤에 where가 파라미터 값을 구속할 수 있는 유형을 추가합니다
Route::get('user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

매개변수의 글로벌 구속조건(이 매개변수의 모든 라우팅에 적용됨)
   pattern     RouteServiceProvider   boot          :
/**
 *           , pattern     。
 *
 * @return void
 */
public function boot()
{
    Route::pattern('id', '[0-9]+');

    parent::boot();
}

라우팅 이름 지정
                 URL      。             name         :

Route::get('user/profile', function () {
    //
})->name('profile');
                :

Route::get('user/profile', 'UserController@showProfile')->name('profile');
                 
Route::get('user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);
            
if ($request->route()->named('profile')) {
        //
    }

라우팅 그룹
1group      middleware   .                    
Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        //    first   second    
    });

    Route::get('user/profile', function () {
        //    first   second    
    });
});
2      
           namespace        PHP                   :

Route::namespace('Admin')->group(function () {
    //   "App\Http\Controllers\Admin"          
});
   ,     ,RouteServiceProvider                 ,          App\Http\Controllers                。  ,           App\Http\Controllers

중간(lavarel은 HTTP 요청을 중간부품으로 필터링)
Laravel         ,      、CSRF    。           app/Http/Middleware   。
         
php artisan make:middleware CheckAge
       app/Http/Middleware         CheckAge  。       ,           age    200         。  ,           home


namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     *        
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($request->age <= 200) {
            return redirect('home');
        }

        return $next($request);
    }

}
    ,     age      200,          HTTP        ;  ,            。              (   「  」      ),     $request             $next 
                      。  ,                        

셋.CSRF
Laravel                   CSRF「  」。                               
             CSRF   url
          routes/web.php  ,   RouteServiceProvider   web                。  ,          URI     VerifyCsrfToken       $except             CSRF   
class VerifyCsrfToken extends BaseVerifier
{
    /**
     *    URI     CSRF   
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
    ];
}
     POST      CSRF    ,VerifyCsrfToken         X-CSRF-TOKEN    。          HTML meta    :

"csrf-token" content="{{ csrf_token() }}">
           jQuery                    。       AJAX        、    CSRF   :

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

4 요청 매개 변수 1 주입에 의존하는 방식
public function store(Request $request)
    {
        $name = $request->input('name');

        //
    }

2 라우팅에서 가져오기
 public function update(Request $request, $id)
    {
        //
    }

url 가져오기
// Without Query String...
$url = $request->url();

// With Query String...
$url = $request->fullUrl();

요청 경로 가져오기
$uri = $request->path();
      
$method = $request->method();

if ($request->isMethod('post')) {
    //
}

오.호응하다
response()->

여섯.뷰
Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
});
return view('greeting')->with('name', 'Victoria');
         
        boot         Facade   share   。  ,         AppServiceProvider                  

일곱확인
$this->validate($request, [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);
           
$this->validate($request, [
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);
      ,   title        unique,       max   。             。
       ,  .       key  
$this->validate($request, [
    'title' => 'required|unique:posts|max:255',
    'author.name' => 'required',
    'author.description' => 'required',
]);
      GET                。   Lavarel      Session         ,          (    )。       $errors   Illuminate\Support\MessageBag      。              ,        。

$errors     Web        Illuminate\View\Middleware\ShareErrorsFromSession         。          ,             $error   ,        $errors              。

폼 요청 클래스 (더욱 복잡한 검증에 적응)
public function rules()
{
    return [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ];
}

오류 메시지
public function messages()
{
    return [
        'title.required' => 'A title is required',
        'body.required'  => 'A message is required',
    ];
}

데이터베이스 1.기본 Sql 쿼리
$users = DB::select('select * from users where active = ?', [1]);
$affected = DB::update('update users set votes = 100 where name = ?', ['John']);

2. 조회 구조기
$users = DB::table('users')->get();
$user = DB::table('users')->where('name', 'John')->first();

특정 필드의 값 가져오기(pluck 사용)
$roles = DB::table('roles')->pluck('title', 'name');

블록 분리(chunk)
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
    foreach ($users as $user) {
        //
    }
});
return false         
DB::table('users')->orderBy('id')->chunk(100, function ($users) {
    // Process the records...

    return false;
});

체인 방법 뒤에 직접 집합 조회를 할 수 있다
count、 maxminavg   sum
$price = DB::table('orders')->max('price');
$price = DB::table('orders')
                ->where('finalized', 1)
                ->avg('price');

필요한 필드 대비만 조회 (chunk)
$users = DB::table('users')->select('name', 'email as user_email')->get();

무거움
$users = DB::table('users')->distinct()->get();

이미 알고 있는 구조 검색기에서 검색의 필드를 추가합니다
$query = DB::table('users')->select('name');

$users = $query->addSelect('age')->get();

관련 질의 1.inner join
$users = DB::table('users')
            ->join('contacts', 'users.id', '=', 'contacts.user_id')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('users.*', 'contacts.phone', 'orders.price')
            ->get();

2.left join
$users = DB::table('users')
            ->leftJoin('posts', 'users.id', '=', 'posts.user_id')
            ->get()

3. 클로즈업 형식의join용법
DB::table('users')
        ->join('contacts', function ($join) {
            $join->on('users.id', '=', 'contacts.user_id')->orOn(...);
        })
        ->get();

흔히 볼 수 있는 체인 방법
블록 컨텐트 참조
where or whereBetween whereNotBetween

whereIn whereNotIn whereNull whereNotNull

whereDate / whereMonth / whereDay / whereYear

whereColumn Where Exists
            DB::table('users')
            ->whereExists(function ($query) {
             $query->select(DB::raw(1))
             ->from('orders')
             ->whereRaw('orders.user_id = users.id');
            })
            ->get();
select * from users
where exists (
    select 1 from orders where orders.user_id = users.id
)
orderBy latest / oldest inRandomOrder

groupBy / having / havingRaw
skip / take
      skip   take                      :

$users = DB::table('users')->skip(10)->take(5)->get();
  ,       limit   offset
$users = DB::table('users')
                ->offset(10)
                ->limit(5)
                ->get();

조건이 성립되었을 때 검색을 실행합니다 (when)
$users = DB::table('users')
                ->when($sortBy, function ($query) use ($sortBy) {
                    return $query->orderBy($sortBy);
                }, function ($query) {
                    return $query->orderBy('name');
                })
                ->get();

삽입
DB::table('users')->insert([
    ['email' => '[email protected]', 'votes' => 0],
    ['email' => '[email protected]', 'votes' => 0]
]);
           Id(insertGetId)
$id = DB::table('users')->insertGetId(
    ['email' => '[email protected]', 'votes' => 0]
);

Upload
DB::table('users')
            ->where('id', 1)
            ->update(['votes' => 1]);
DB::table('users')->increment('votes', 5);

DB::table('users')->decrement('votes');

자동 증가와 동시에 다른 필드를 업데이트할 수 있습니다
DB::table('users')->increment('votes', 1, ['name' => 'John']);

delete
DB::table('users')->delete();

DB::table('users')->where('votes', '>', 100)->delete();

시계를 비우다
DB::table('users')->truncate();

비관 자물쇠?what
                 select      「    」    。        「   」,     sharedLock   。               ,         :

페이지 나누기
       

페이지당 15개
$users = DB::table('users')->paginate(15);

이전 페이지 다음 페이지만 지원
$users = DB::table('users')->simplePaginate(15);
Laravel         groupBy        。                 groupBy,                

모델
1. 모델 자동 생성
php artisan make:model User
         
php artisan make:model User --migration

php artisan make:model User -m
class Flight extends Model
{
    /**
     *          
     *
     * @var string
     */
    protected $table = 'my_flights';//     Flight           Flights 

}

메인 키
Eloquent                 id      。         $primaryKey          。  ,Eloquent              ,                       int。                  ,         public $incrementing      false

타임 스탬프
     ,Eloquent             created_at   updated_at   。        Eloquent           ,       $timestamps       false

데이터베이스 연결
     ,    Eloquent                     。              ,     $connection   
protected $connection = 'connection-name';

모델 조회
$flights = App\Flight::all();
$flights = App\Flight::where('active', 1)
               ->orderBy('name', 'desc')
               ->take(10)
               ->get();
   Eloquent         ,                       。    Eloquent              

블록 처리, 조회 구조기의 Chunk와 유사하며, 여기서는 클로즈업 모드를 사용합니다
Flight::chunk(200, function ($flights) {
    foreach ($flights as $flight) {
        //
    }
});

단일 모델/컬렉션 가져오기
//           ...
$flight = App\Flight::find(1);
$flights = App\Flight::find([1, 2, 3]);

//                ...
$flight = App\Flight::where('active', 1)->first();

질의에 대한 결과 자동 반환 예외
$model = App\Flight::where('legs', '>', 100)->firstOrFail();

취합
               count、summax...
$count = App\Flight::where('active', 1)->count();

$max = App\Flight::where('active', 1)->max('price');
      

기본 추가
             ,           ,             save     :
public function store(Request $request)
    {
        //     ...

        $flight = new Flight;

        $flight->name = $request->name;

        $flight->save();
    }
save       ,created_at    updated_at           ,              。

기본 업데이트
     ,       ,             ,     save   。   ,updated_at           ,              :
$flight = App\Flight::find(1);

$flight->name = 'New Flight Name';

$flight->save();

대량 업데이트
App\Flight::where('active', 1)
          ->where('destination', 'San Diego')
          ->update(['delayed' => 1]);

모델 생성 또는 업데이트
  ,               ,          ,Laravel       updateOrCreate           ,   firstOrCreate   , updateOrCreate         ,       save() :
$flight = App\Flight::updateOrCreate(
    ['departure' => 'Oakland', 'destination' => 'San Diego'],
    ['price' => 99]
);

삭제
기본 삭제
$flight = App\Flight::find(1);

$flight->delete();

주 키를 통해 삭제
App\Flight::destroy(1);

App\Flight::destroy([1, 2, 3]);

App\Flight::destroy(1, 2, 3);

여러 삭제
$deletedRows = App\Flight::where('active', 0)->delete();
   
         Illuminate\Database\Eloquent\SoftDeletes trait     deleted_at       $dates    :
class Flight extends Model
{
    use SoftDeletes;

    /**
     *            。
     *
     * @var array
     */
    protected $dates = ['deleted_at'];
}
  ,       deleted_at        。Laravel                        :

Schema::table('flights', function ($table) {
    $table->softDeletes();
});
$flight->history()->withTrashed()->get();//        
         
$flights = App\Flight::onlyTrashed()
                ->where('airline_id', 1)
                ->get();
         
$flight->restore();
App\Flight::withTrashed()
        ->where('airline_id', 1)
        ->restore();
       
//           ...
$flight->forceDelete();

//           ...
$flight->history()->forceDelete();

연관 모델
   
public function user()
    {
        return $this->belongsTo('App\User');
    }
return $this->hasOne('App\Phone', 'foreign_key');

일대다
public function comments()
    {
        return $this->hasMany('App\Comment');
    }
public function post()
    {
        return $this->belongsTo('App\Post');
    }

좋은 웹페이지 즐겨찾기