WordPress 데이터베이스에서 직접 데이터를 가져올 수 있는 모델 클래스 컬렉션입니다.
Corcel은 Eloquent ORM(Laravel 프레임워크) 위에 구축된 PHP 클래스 모음으로, WordPress 데이터베이스에 직접 연결하고 데이터를 가져올 수 있는 유창한 인터페이스를 제공합니다.
게시물, 사용자 정의 유형 등을 삽입하기 위해 WordPress를 백엔드(관리 패널) 또는 CMS로 사용할 수 있으며, 반대편에서는 해당 데이터를 쿼리하는(모델 레이어로) 다른 PHP 앱을 사용할 수 있습니다. Corcel을 Laravel과 함께 사용하는 것이 더 쉽지만 Composer를 사용하는 모든 PHP 프로젝트에서 자유롭게 사용할 수 있습니다.
나에게 커피를 사주세요 | Twitter에서 Corcel을 팔로우하세요.
라라벨 | 코르셀 |
---|---|
5.1.x | ~2.1.0 |
5.2.x | ~2.2.0 |
5.3.x | ~2.3.0 |
5.4.x | ~2.4.0 |
5.5.x | ~2.5.0 |
5.6.x | ~2.6.0 |
5.7.x | ~2.7.0 |
5.8.x | ~2.8.0 |
6.0.x | ^3.0.0 |
7.0.x | ^4.0.0 |
8.0.x | ^5.0.0 |
9.0.x | ^6.0.0 |
10.0.x | ^7.0.0 |
11.0.x | ^8.0.0 |
프로젝트에 Corcel을 설치하려면 Composer를 사용해야 합니다.
composer require jgrossi/corcel
Corcel은 Laravel의 Auto Discovery를 사용하여 자신을 등록합니다.
config/app.php
에 CorcelServiceProvider
포함해야 합니다.
' providers ' => [
/*
* Package Service Providers...
*/
Corcel Laravel CorcelServiceProvider::class,
]
이제 데이터베이스가 올바르게 설정되었는지 확인하고 매우 쉬운 방법으로 사용자 정의 게시물 유형 및 단축 코드를 등록할 수 있도록 구성 파일을 구성하십시오.
터미널에서 다음 Artisan 명령어를 실행하세요:
php artisan vendor:publish --provider="CorcelLaravelCorcelServiceProvider"
이제 WordPress 테이블 등을 사용하여 데이터베이스 연결을 설정할 수 있는 config/corcel.php
구성 파일이 생겼습니다.
config/corcel.php
에서 Corcel에서 사용하려는 데이터베이스 connection
설정하기만 하면 됩니다.
config/database.php
파일에 다음과 같은 데이터베이스 연결이 있다고 가정해 보겠습니다:
// File: /config/database.php
' connections ' => [
' mysql ' => [ // for Laravel database
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' database ' => ' mydatabase ' ,
' username ' => ' admin '
'password' => 'secret',
' charset ' => ' utf8 ' ,
' collation ' => ' utf8_unicode_ci ' ,
' prefix ' => '' ,
' strict ' => false ,
' engine ' => null ,
],
' wordpress ' => [ // for WordPress database (used by Corcel)
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' database ' => ' mydatabase ' ,
' username ' => ' admin ' ,
' password ' => ' secret ' ,
' charset ' => ' utf8 ' ,
' collation ' => ' utf8_unicode_ci ' ,
' prefix ' => ' wp_ ' ,
' strict ' => false ,
' engine ' => null ,
],
],
이 경우 Corcel에 대한 wordpress
연결을 사용해야 하므로 Corcel 구성 파일 config/corcel.php
에 설정하면 됩니다.
' connection ' => ' wordpress ' ,
여기에서는 Corcel 요구 사항에 맞게 데이터베이스를 구성해야 합니다. 먼저, 아직 로드되지 않은 경우 Composer autoload
파일을 포함해야 합니다.
require __DIR__ . ' /vendor/autoload.php ' ;
이제 WordPress 데이터베이스 매개변수를 설정해야 합니다.
$ params = [
' database ' => ' database_name ' ,
' username ' => ' username ' ,
' password ' => ' pa$$word ' ,
' prefix ' => ' wp_ ' // default prefix is 'wp_', you can change to your own prefix
];
Corcel Database:: connect ( $ params );
모든 Eloquent 매개변수를 지정할 수 있지만 일부는 기본값입니다(그러나 이를 재정의할 수 있습니다).
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' charset ' => ' utf8 ' ,
' collation ' => ' utf8_unicode_ci ' ,
' prefix ' => ' wp_ ' , // Specify the prefix for WordPress tables, default prefix is 'wp_'
Post::method()
볼 때마다AppPost
와 같이 자체 Post 클래스(연결 이름을 설정하는 곳)를 사용하는 경우AppPost::method()
Post::method()
method()를 사용해야 합니다.Post::method()
. 모든 예에서는 사용자가 이 차이점을 이미 알고 있다고 가정합니다.
예제에서는
Post::method()
나타날 때마다CorcelModelPost::method()
가정합니다.
// All published posts
$ posts = Post:: published ()-> get ();
$ posts = Post:: status ( ' publish ' )-> get ();
// A specific post
$ post = Post:: find ( 31 );
echo $ post -> post_title ;
선택적으로 CorcelPost
확장하는 자신만의 Post
모델(또는 페이지 등)을 만들 수 있습니다. 그런 다음 사용 중인 연결 이름(Corcel의 기본 이름을 재정의하려는 경우)을 설정합니다(이 경우 foo-bar
).
CorcelModelPost
클래스를 확장하면 WordPress 데이터베이스에서 사용해야 하는 항목에 따라 사용자 정의 메서드와 논리를 추가할 수 있으므로 프로젝트에 유연성이 추가될 수 있습니다.
<?php // File: app/Post.php
namespace App ;
use Corcel Model Post as Corcel ;
class Post extends Corcel
{
protected $ connection = ' foo-bar ' ;
public function customMethod () {
//
}
}
이제 자신의 클래스를 사용하여 WP 데이터베이스 데이터를 가져올 수 있습니다.
$ posts = App Post:: all (); // using the 'foo-bar' connection
Post
클래스를 확장할 필요가 없다는 점을 기억하세요.CorcelModelPost
및 기타 모든 모델을 문제 없이 사용할 수 있습니다.
참고: Corcel v1에서는
Post::save()
메서드를 사용하여 메타데이터를 저장할 수 있습니다. 그것은 더 이상 허용되지 않습니다. 포스트 메타를 저장하려면saveMeta()
또는createMeta()
(아래 참조) 메서드를 사용하세요.
게시물에서도 메타데이터를 검색할 수 있습니다.
// Get a custom meta value (like 'link' or whatever) from a post (any type)
$ post = Post:: find ( 31 );
echo $ post -> meta -> link ; // OR
echo $ post -> fields -> link ;
echo $ post -> link ; // OR
사용자로부터 메타데이터를 생성하거나 업데이트하려면 saveMeta()
또는 saveField()
메소드를 사용하면 됩니다. Eloquent save()
메소드처럼 bool
반환합니다.
$ post = Post:: find ( 1 );
$ post -> saveMeta ( ' username ' , ' jgrossi ' );
동시에 많은 메타데이터를 저장할 수도 있습니다.
$ post = Post:: find ( 1 );
$ post -> saveMeta ([
' username ' => ' jgrossi ' ,
' url ' => ' http://jgrossi.com ' ,
]);
saveX()
메서드처럼 작동하는 createMeta()
및 createField()
메서드도 있지만 생성에만 사용되며 bool
대신 PostMeta
생성 인스턴스를 반환합니다.
$ post = Post:: find ( 1 );
$ postMeta = $ post -> createMeta ( ' foo ' , ' bar ' ); // instance of PostMeta class
$ trueOrFalse = $ post -> saveMeta ( ' foo ' , ' baz ' ); // boolean
Post
(또는 HasMetaFields
특성을 사용하는 다른 모델) 클래스의 범위를 사용하여 사용자 정의 필드(메타)로 게시물을 쿼리할 수 있는 여러 가지 가능성이 있습니다.
메타 키가 존재하는지 확인하려면 hasMeta()
범위를 사용하세요.
// Finds a published post with a meta flag.
$post = Post::published()->hasMeta('featured_article')->first();
메타 필드를 정확하게 일치시키려면 hasMeta()
범위를 값과 함께 사용할 수 있습니다.
// Find a published post which matches both meta_key and meta_value.
$ post = Post:: published ()-> hasMeta ( ' username ' , ' jgrossi ' )-> first ();
여러 메타 필드를 일치시켜야 하는 경우 배열을 매개변수로 전달하는 hasMeta()
범위를 사용할 수도 있습니다.
$ post = Post:: hasMeta ([ ' username ' => ' jgrossi ' ])-> first ();
$ post = Post:: hasMeta ([ ' username ' => ' jgrossi ' , ' url ' => ' jgrossi.com ' ])-> first ();
// Or just passing the keys
$ post = Post:: hasMeta ([ ' username ' , ' url ' ])-> first ();
대소문자를 구분하지 않는 문자열을 일치시키거나 와일드카드와 일치시켜야 하는 경우 hasMetaLike()
범위를 값과 함께 사용할 수 있습니다. 이는 SQL LIKE
연산자를 사용하므로 '%'를 와일드카드 연산자로 사용합니다.
// Will match: 'J Grossi', 'J GROSSI', and 'j grossi'.
$ post = Post:: published ()-> hasMetaLike ( ' author ' , ' J GROSSI ' )-> first ();
// Using % as a wildcard will match: 'J Grossi', 'J GROSSI', 'j grossi', 'Junior Grossi' etc.
$ post = Post:: published ()-> hasMetaLike ( ' author ' , ' J%GROSSI ' )-> first ();
Post
클래스는 "별칭"을 지원하므로 Post
클래스를 확인하면 post_title
의 title
및 post_content
의 content
과 같이 정적 $aliases
배열에 정의된 일부 별칭을 기록해야 합니다.
$ post = Post:: find ( 1 );
$ post -> title === $ post -> post_title ; // true
Post
클래스를 확장하여 자신만의 클래스를 만드는 경우 $aliases
도 사용할 수 있습니다. 자신의 클래스 내부에 있는 정적 속성에 새 별칭을 추가하면 상위 Post
클래스의 모든 별칭이 자동으로 상속됩니다.
class A extends Corcel Post
{
protected static $ aliases = [
' foo ' => ' post_foo ' ,
];
}
$ a = A:: find ( 1 );
echo $ a -> foo ;
echo $ a -> title ; // from Post class
게시물을 주문하려면 Post
및 User
클래스 모두에 newest()
및 oldest()
범위를 사용할 수 있습니다.
$ newest = Post:: newest ()-> first ();
$ oldest = Post:: oldest ()-> first ();
게시물을 주문하려면 Eloquent paginate()
메소드를 사용하세요:
$ posts = Post:: published ()-> paginate ( 5 );
foreach ( $ posts as $ post ) {
// ...
}
페이지 매기기 링크를 표시하려면 links()
메서드를 호출하면 됩니다.
{{ $ posts -> links () }}
ACF(Advanced Custom Fields) 플러그인으로 생성된 사용자 정의 필드를 검색하려면 corcel/acf
플러그인을 설치해야 합니다. 자세한 내용을 보려면 여기를 클릭하고 다음과 같이 사용자 정의 필드를 호출하세요.
$ post = Post:: find ( 123 );
echo $ post -> acf -> some_radio_field ;
$ repeaterFields = $ post -> acf -> my_repeater_name ;
불필요한 SQL 쿼리를 피하려면 요청하는 필드 유형을 설정하기만 하면 됩니다. 일반적으로 필드 유형을 가져오려면 두 개의 SQL 쿼리가 필요하므로 이를 지정하려는 경우 추가 쿼리를 건너뜁니다.
$ post = Post:: find ( 123 );
echo $ post -> acf -> text ( ' text_field_name ' );
echo $ post -> acf -> boolean ( ' boolean_field_name ' );
사용자 정의 게시물 유형으로도 작업할 수 있습니다. type(string)
메소드를 사용하거나 자신만의 클래스를 만들 수 있습니다.
// using type() method
$ videos = Post:: type ( ' video ' )-> status ( ' publish ' )-> get ();
// using your own class
class Video extends Corcel Post
{
protected $ postType = ' video ' ;
}
$ videos = Video:: status ( ' publish ' )-> get ();
type()
메소드를 사용하면 Corcel이 모든 객체를 CorcelPost
로 반환하게 됩니다. 사용자 정의 클래스를 사용하면 사용자 정의 메소드 및 속성을 포함하여 클래스를 사용자 정의하고 모든 객체를 Video
로 반환할 수 있는 이점이 있습니다.
사용자 정의 게시물 유형 및 메타데이터:
// Get 3 posts with custom post type (store) and show its address
$ stores = Post:: type ( ' store ' )-> status ( ' publish ' )-> take ( 3 )-> get ();
foreach ( $ stores as $ store ) {
$ storeAddress = $ store -> address ; // option 1
$ storeAddress = $ store -> meta -> address ; // option 2
$ storeAddress = $ store -> fields -> address ; // option 3
}
Post::type('video)->first()
또는 Video::first()
와 같은 것을 호출할 때마다 CorcelModelPost
인스턴스를 받습니다.
사용자 정의 게시물 유형에 대한 새 클래스를 생성하기로 선택한 경우 해당 게시물 유형의 모든 인스턴스에 대해 이 클래스가 반환되도록 할 수 있습니다.
등록하려는 모든 사용자 정의 게시물 유형에 대해 Post::registerPostType()
메서드를 호출하는 대신 Corcel의 구성 파일을 사용하고 모든 사용자 정의 게시물과 해당 클래스를 매핑하면 됩니다. 자동으로 등록됩니다.
' post_types ' => [
' video ' => App Video::class,
' foo ' => App Foo::class,
]
따라서 사용자 정의 게시물 유형을 쿼리할 때마다 매핑된 인스턴스가 반환됩니다.
이는 다양한 유형의 게시물 컬렉션을 얻으려는 경우(예: 메뉴에 정의된 게시물을 가져올 때) 특히 유용합니다.
//all objects in the $videos Collection will be instances of Post
$ videos = Post:: type ( ' video ' )-> status ( ' publish ' )-> get ();
// register the video custom post type and its particular class
Post:: registerPostType ( ' video ' , ' AppVideo ' )
//now all objects in the $videos Collection will be instances of Video
$ videos = Post:: type ( ' video ' )-> status ( ' publish ' )-> get ();
Page 또는 Post와 같은 내장 클래스에 대해서도 이 작업을 수행할 수 있습니다. 연결된 게시물 유형 문자열로 Page 또는 Post 클래스를 등록하기만 하면 해당 개체가 기본 개체 대신 반환됩니다.
config/corcel.php
파일 내 'shortcodes'
키 아래에 원하는 모든 단축 코드를 매핑할 수 있습니다. 이 경우 render()
메서드가 필요한 CorcelShortcode
인터페이스를 implements
고유한 클래스를 만들어야 합니다.
' shortcodes ' => [
' foo ' => App Shortcodes FooShortcode::class,
' bar ' => App Shortcodes BarShortcode::class,
],
다음은 샘플 단축 코드 클래스입니다.
class FakeShortcode implements Corcel Shortcode
{
/**
* @param ShortcodeInterface $shortcode
* @return string
*/
public function render ( ShortcodeInterface $ shortcode )
{
return sprintf (
' html-for-shortcode-%s-%s ' ,
$ shortcode -> getName (),
$ shortcode -> getParameter ( ' one ' )
);
}
}
Post
모델에서 addShortcode
메소드를 호출하여 단축 코드를 추가할 수 있습니다.
// [gallery id="1"]
Post:: addShortcode ( ' gallery ' , function ( $ shortcode ) {
return $ shortcode -> getName () . ' . ' . $ shortcode -> getParameter ( ' id ' );
});
$ post = Post:: find ( 1 );
echo $ post -> content ;
Laravel 5.5는 패키지 자동 검색을 사용하므로 ServiceProvider를 수동으로 추가할 필요가 없습니다.
Laravel을 사용하는 경우 boot
방법에서 AppProvidersAppServiceProvider
에 단축 코드 처리기를 추가하는 것이 좋습니다.
단축 코드는 Thunderer/단축 코드 라이브러리로 구문 분석됩니다.
여러 가지 다른 파서가 제공됩니다. RegularParser
는 기술적으로 가장 정확하며 기본적으로 제공됩니다. 이는 대부분의 경우에 적합합니다. 그러나 단축 코드 구문 분석에서 일부 불규칙성이 발견되면 WordPress의 단축 코드 정규식과 더욱 충실하게 일치하는 WordpressParser
를 사용하도록 Corcel을 구성해야 할 수도 있습니다. 이렇게 하려면 Laravel을 사용하는 경우 config/corcel.php
파일을 편집하고 원하는 구문 분석기의 주석 처리를 제거하세요. 또는 이를 자신만의 파서로 바꿀 수 있습니다.
' shortcode_parser ' => Thunder Shortcode Parser RegularParser::class,
// 'shortcode_parser' => ThunderShortcodeParserWordpressParser::class,
Laravel을 사용하지 않는 경우 런타임에 이를 수행할 수 있습니다. 예를 들어 Post
와 같은 Shortcodes
특성을 사용하는 모든 클래스에서 setShortcodeParser()
메서드를 호출하면 됩니다.
$ post -> setShortcodeParser ( new WordpressParser ());
echo $ post -> content ; // content parsed with "WordpressParser" class
단축 코드 패키지에 대한 자세한 내용을 보려면 여기를 클릭하세요.
다음과 같은 특정 게시물에 대한 분류를 얻을 수 있습니다.
$ post = Post:: find ( 1 );
$ taxonomy = $ post -> taxonomies ()-> first ();
echo $ taxonomy -> taxonomy ;
또는 분류를 사용하여 게시물을 검색할 수 있습니다.
$ post = Post:: taxonomy ( ' category ' , ' php ' )-> first ();
WordPress 함수 get_post_format()
과 같은 게시물 형식을 얻을 수도 있습니다.
echo $ post -> getFormat (); // should return something like 'video', etc
페이지는 사용자 정의 게시물 유형과 같습니다. Post::type('page')
또는 CorcelModelPage
클래스를 사용할 수 있습니다.
use Corcel Model Page ;
// Find a page by slug
$ page = Page:: slug ( ' about ' )-> first (); // OR
$ page = Post:: type ( ' page ' )-> slug ( ' about ' )-> first ();
echo $ page -> post_title ;
카테고리나 분류를 가져오거나 특정 카테고리에서 게시물을 로드하세요. 그것을 달성하는 방법에는 여러 가지가 있습니다.
// all categories
$ cat = Taxonomy:: category ()-> slug ( ' uncategorized ' )-> posts -> first ();
echo " <pre> " ; print_r ( $ cat -> name ); echo " </pre> " ;
// only all categories and posts connected with it
$ cat = Taxonomy:: where ( ' taxonomy ' , ' category ' )-> with ( ' posts ' )-> get ();
$ cat -> each ( function ( $ category ) {
echo $ category -> name ;
});
// clean and simple all posts from a category
$ cat = Category:: slug ( ' uncategorized ' )-> posts -> first ();
$ cat -> posts -> each ( function ( $ post ) {
echo $ post -> post_title ;
});
Post
이나 Page
에서 첨부 파일 및/또는 개정판 가져오기.
$ page = Page:: slug ( ' about ' )-> with ( ' attachment ' )-> first ();
// get feature image from page or post
print_r ( $ page -> attachment );
$ post = Post:: slug ( ' test ' )-> with ( ' revision ' )-> first ();
// get all revisions from a post or page
print_r ( $ post -> revision );
Post
이나 Page
의 썸네일 가져오기.
$ post = Post:: find ( 1 );
// Retrieve an instance of CorcelModelMetaThumbnailMeta.
print_r ( $ post -> thumbnail );
// For convenience you may also echo the thumbnail instance to get the URL of the original image.
echo $ post -> thumbnail ;
특정 썸네일 크기를 검색하려면 썸네일 객체에 대해 ->size()
메소드를 호출하고 썸네일 크기 문자열 매개변수(예: thumbnail
또는 medium
)를 전달할 수 있습니다. 미리보기 이미지가 생성된 경우 이 메서드는 이미지 메타데이터 배열을 반환하고, 그렇지 않으면 원본 이미지 URL이 대체로 반환됩니다.
if ( $ post -> thumbnail !== null ) {
/**
* [
* 'file' => 'filename-300x300.jpg',
* 'width' => 300,
* 'height' => 300,
* 'mime-type' => 'image/jpeg',
* 'url' => 'http://localhost/wp-content/uploads/filename-300x300.jpg',
* ]
*/
print_r ( $ post -> thumbnail -> size ( Corcel Model Meta ThumbnailMeta:: SIZE_THUMBNAIL ));
// http://localhost/wp-content/uploads/filename.jpg
print_r ( $ post -> thumbnail -> size ( ' invalid_size ' ));
}
Corcel의 이전 버전에서는 이 클래스를
Option
(단수) 대신Options
라고 불렀습니다. 따라서v2.0.0
부터 항상 이 클래스를 단수형으로 사용하도록 주의하세요.
Option::getAll()
메서드는Option::asArray($keys [])
대신하여 Corcel 2+에서 제거되었습니다.
Option
클래스를 사용하여 wp_options
테이블에서 데이터를 가져올 수 있습니다.
$ siteUrl = Option:: get ( ' siteurl ' );
새로운 옵션을 추가할 수도 있습니다.
Option:: add ( ' foo ' , ' bar ' ); // stored as string
Option:: add ( ' baz ' , [ ' one ' => ' two ' ]); // this will be serialized and saved
간단한 배열로 모든 옵션을 얻을 수 있습니다.
$ options = Option:: asArray ();
echo $ options [ ' siteurl ' ];
또는 가져오려는 키만 지정할 수도 있습니다.
$ options = Option:: asArray ([ ' siteurl ' , ' home ' , ' blogname ' ]);
echo $ options [ ' home ' ];
슬러그로 메뉴를 얻으려면 아래 구문을 사용하십시오. 메뉴 항목은 items
변수( CorcelModelMenuItem
개체의 컬렉션)에 로드됩니다.
현재 지원되는 메뉴 항목은 페이지, 게시물, 사용자 정의 링크 및 카테고리입니다.
MenuItem
클래스의 인스턴스가 있으면 원래 인스턴스(예: 원래 페이지 또는 용어)를 사용하려면 MenuItem::instance()
메서드를 호출하기만 하면 됩니다. MenuItem
개체는 post_type
nav_menu_item
과 동일한 게시물입니다.
$ menu = Menu:: slug ( ' primary ' )-> first ();
foreach ( $ menu -> items as $ item ) {
echo $ item -> instance ()-> title ; // if it's a Post
echo $ item -> instance ()-> name ; // if it's a Term
echo $ item -> instance ()-> link_text ; // if it's a custom link
}
instance()
메소드는 일치하는 객체를 반환합니다:
post
메뉴 항목에 대한 Post
인스턴스.page
메뉴 항목의 Page
인스턴스입니다.custom
메뉴 항목에 대한 CustomLink
인스턴스.category
메뉴 항목에 대한 Term
인스턴스입니다.예를 들어 다중 레벨 메뉴를 처리하려면 모든 메뉴 항목을 반복하여 올바른 레벨에 배치합니다.
MenuItem::parent()
메서드를 사용하여 해당 메뉴 항목의 상위 인스턴스를 검색할 수 있습니다.
$ items = Menu:: slug ( ' foo ' )-> first ()-> items ;
$ parent = $ items -> first ()-> parent (); // Post, Page, CustomLink or Term (category)
상위 항목에 따라 메뉴 항목을 그룹화하려면 $menu->items
컬렉션에서 ->groupBy()
메서드를 사용하여 $item->parent()->ID
별로 메뉴 항목을 그룹화할 수 있습니다.
groupBy()
메서드에 대해 더 자세히 알아보려면 Laravel 문서를 살펴보세요.
게시물 작업과 동일한 방식으로 사용자를 조작할 수 있습니다.
// All users
$ users = User:: get ();
// A specific user
$ user = User:: find ( 1 );
echo $ user -> user_login ;
Laravel 5.4 이하 버전을 사용하는 경우 CorcelServiceProvider
공급자가 등록되어 있는지 확인하세요.
그런 다음 Laravel이 WordPress 사용자로 로그인할 수 있도록 config/auth.php
에 사용자 공급자를 정의합니다.
' providers ' => [
' users ' => [
' driver ' => ' corcel ' ,
' model ' => Corcel Model User::class,
],
],
이제 Auth
파사드를 사용하여 사용자를 인증할 수 있습니다:
Auth:: validate ([
' email ' => ' [email protected] ' , // or using 'username' too
' password ' => ' secret ' ,
]);
Laravel의 비밀번호 재설정이 Corcel과 함께 작동하도록 하려면 비밀번호가 데이터베이스에 저장되는 방식을 재정의해야 합니다. 이렇게 하려면 Auth/PasswordController.php
다음에서 변경해야 합니다.
use App Http Controllers Controller ;
use Illuminate Foundation Auth ResetsPasswords ;
class PasswordController extends Controller
{
use ResetsPasswords;
에게
use App Http Controllers Controller ;
use Illuminate Foundation Auth ResetsPasswords ;
use Corcel Laravel Auth ResetsPasswords as CorcelResetsPasswords ;
class PasswordController extends Controller
{
use ResetsPasswords, CorcelResetsPasswords {
CorcelResetsPasswords::resetPassword insteadof ResetsPasswords;
}
AuthUserProvider
클래스를 사용하여 사용자를 수동으로 인증할 수 있습니다.
$ userProvider = new Corcel Laravel Auth AuthUserProvider ;
$ user = $ userProvider -> retrieveByCredentials ([ ' username ' => ' admin ' ]);
if (! is_null ( $ user ) && $ userProvider -> validateCredentials ( $ user , [ ' password ' => ' admin ' ])) {
// successfully login
}
사용자의 자격 증명으로
username
과
phpunit 테스트를 실행하려면 다음 명령을 실행하십시오.
./vendor/bin/phpunit
전역 phpunit
명령이 설치되어 있으면 다음을 입력하면 됩니다.
phpunit
모든 테스트는 :memory
데이터베이스와 함께 Sqlite를 사용하여 작성되었으므로 메모리에서 실행됩니다. 모든 테스트는 factories
와 migrations
사용합니다. 자세한 내용은 tests/database/factories
및 tests/database/migrations
디렉터리를 살펴보세요.
Corcel을 개선하는 데 도움이 되는 모든 기여를 환영합니다.
PR(Pull Request)을 제출하기 전에 다음 지침을 고려하십시오.
Github에서 https://github.com/corcel/corcel을 포크하세요.
Corcel이 아닌 포크된 저장소를 로컬로 복제하고 수정하려는 버전( 2.1
, 2.2
, 2.3
, 2.4
또는 2.5
)을 기반으로 자체 분기를 만듭니다. git checkout -b my-fix-branch 2.5
;
모든 코드를 변경합니다. 추가하는 기능이나 버그 수정(아직 테스트되지 않은 경우)에 대해 최소한 하나의 테스트 사례를 작성하려면 여기에 기억하세요. 우리의 목표는 100% 코드를 테스트하는 것입니다. 따라서 더 나은 코드를 작성할 수 있도록 도와주세요 ;-) 테스트 경험이 없다면 배울 수 있는 좋은 기회입니다. 테스트 사례를 살펴보면 얼마나 간단한지 알 수 있습니다.
단위 테스트를 로컬에서 실행하여 변경 사항으로 인해 다른 코드가 손상되지 않았는지 확인하세요.
새 브랜치를 포크된 저장소로 푸시합니다. 일반적으로 git push origin HEAD
작동합니다.
GitHub에서 다시 사용자 정의 my-fix-branch
브랜치(포크된 저장소)에서 관련 브랜치( corcel:2.5
, 예를 들어 corcel:master
아닌 PR)를 생성하세요.
승인을 기다려주세요 :-)
MIT 라이센스 © Junior Grossi