Una colección de clases de modelo que le permite obtener datos directamente desde una base de datos de WordPress.
Corcel es una colección de clases PHP construidas sobre Eloquent ORM (del marco Laravel), que proporciona una interfaz fluida para conectarse y obtener datos directamente desde una base de datos de WordPress.
Puede usar WordPress como backend (panel de administración) o CMS, para insertar publicaciones, tipos personalizados, etc., y cualquier otra aplicación PHP en el otro lado que consulte esos datos (como una capa de modelo). Es más fácil usar Corcel con Laravel, pero puedes usarlo con cualquier proyecto PHP que use Composer.
Cómprame un café | Sigue a Corcel en Twitter
Laravel | Córcel |
---|---|
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 |
Necesita usar Composer para instalar Corcel en su proyecto:
composer require jgrossi/corcel
Corcel se registrará utilizando Auto Discovery de Laravel.
Tendrás que incluir CorcelServiceProvider
en tu config/app.php
:
' providers ' => [
/*
* Package Service Providers...
*/
Corcel Laravel CorcelServiceProvider::class,
]
Ahora configure nuestro archivo de configuración para asegurarse de que su base de datos esté configurada correctamente y para permitirle registrar tipos de publicaciones personalizadas y códigos cortos de una manera muy sencilla:
Ejecute el siguiente comando Artisan en su terminal:
php artisan vendor:publish --provider="CorcelLaravelCorcelServiceProvider"
Ahora tiene un archivo de configuración config/corcel.php
, donde puede configurar la conexión de la base de datos con las tablas de WordPress y mucho más.
Simplemente configure la connection
de base de datos que desea que Corcel utilice en config/corcel.php
.
Supongamos que tiene las siguientes conexiones de bases de datos en su archivo 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 ,
],
],
En este caso, querrás utilizar la conexión wordpress
para Corcel, así que configúrala en el archivo de configuración de Corcel config/corcel.php
:
' connection ' => ' wordpress ' ,
Aquí debe configurar la base de datos para que se ajuste a los requisitos de Corcel. Primero, debes incluir el archivo autoload
de Composer si aún no está cargado:
require __DIR__ . ' /vendor/autoload.php ' ;
Ahora debes configurar los parámetros de tu base de datos de 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 );
Puede especificar todos los parámetros de Eloquent, pero algunos son predeterminados (pero puede anularlos).
' driver ' => ' mysql ' ,
' host ' => ' localhost ' ,
' charset ' => ' utf8 ' ,
' collation ' => ' utf8_unicode_ci ' ,
' prefix ' => ' wp_ ' , // Specify the prefix for WordPress tables, default prefix is 'wp_'
Cada vez que vea
Post::method()
, si está usando su propia clase Post (donde establece el nombre de la conexión), comoAppPost
debe usarAppPost::method()
y noPost::method()
. Todos los ejemplos suponen que ya conoces esta diferencia.
En los ejemplos, cada vez que vea
Post::method()
asumaCorcelModelPost::method()
.
// All published posts
$ posts = Post:: published ()-> get ();
$ posts = Post:: status ( ' publish ' )-> get ();
// A specific post
$ post = Post:: find ( 31 );
echo $ post -> post_title ;
Opcionalmente, puede crear su propio modelo Post
(o página, o lo que sea) que extienda CorcelPost
. Luego configure el nombre de la conexión (si desea anular el predeterminado de Corcel) que está utilizando, en este caso foo-bar
:
Extender la clase
CorcelModelPost
puede agregar flexibilidad a su proyecto, una vez que pueda agregar métodos y lógica personalizados, de acuerdo con lo que necesite usar desde su base de datos de 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 () {
//
}
}
Entonces, ahora puedes recuperar datos de la base de datos de WP usando tu propia clase:
$ posts = App Post:: all (); // using the 'foo-bar' connection
Solo recuerda que no tienes que extender nuestra clase
Post
, puedes usarCorcelModelPost
y todos los demás modelos sin ningún problema.
NOTA: En Corcel v1 puede guardar metadatos utilizando el método
Post::save()
. Eso ya no está permitido. Utilice los métodossaveMeta()
ocreateMeta()
(ver más abajo) para guardar el metadato de la publicación.
También puedes recuperar metadatos de las publicaciones.
// 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
Para crear o actualizar metadatos de un usuario, simplemente use los métodos saveMeta()
o saveField()
. Devuelven bool
como el método save()
de Eloquent.
$ post = Post:: find ( 1 );
$ post -> saveMeta ( ' username ' , ' jgrossi ' );
También puedes guardar muchos metadatos al mismo tiempo:
$ post = Post:: find ( 1 );
$ post -> saveMeta ([
' username ' => ' jgrossi ' ,
' url ' => ' http://jgrossi.com ' ,
]);
También tienes los métodos createMeta()
y createField()
, que funcionan como los métodos saveX()
, pero se usan solo para la creación y devuelven la instancia creada de PostMeta
, en lugar de bool
.
$ post = Post:: find ( 1 );
$ postMeta = $ post -> createMeta ( ' foo ' , ' bar ' ); // instance of PostMeta class
$ trueOrFalse = $ post -> saveMeta ( ' foo ' , ' baz ' ); // boolean
Hay múltiples posibilidades para consultar publicaciones por sus campos personalizados (meta) usando alcances en una clase Post
(u otro modelo que use el rasgo HasMetaFields
):
Para verificar si existe una clave meta, use el alcance hasMeta()
:
// Finds a published post with a meta flag.
$post = Post::published()->hasMeta('featured_article')->first();
Si desea hacer coincidir con precisión un metacampo, puede usar el alcance hasMeta()
con un valor.
// Find a published post which matches both meta_key and meta_value.
$ post = Post:: published ()-> hasMeta ( ' username ' , ' jgrossi ' )-> first ();
Si necesita hacer coincidir varios metacampos, también puede usar el alcance hasMeta()
pasando una matriz como parámetro:
$ 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 ();
Si necesita hacer coincidir una cadena que no distingue entre mayúsculas y minúsculas o hacer coincidir con comodines, puede usar el alcance hasMetaLike()
con un valor. Esto utiliza un operador SQL LIKE
, así que utilice '%' como operador comodín.
// 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 ();
La clase Post
admite "alias", por lo que si marca la clase Post
debería tener en cuenta algunos alias definidos en la matriz estática $aliases
, como title
para post_title
y content
para post_content
.
$ post = Post:: find ( 1 );
$ post -> title === $ post -> post_title ; // true
Si está ampliando la clase Post
para crear su propia clase, también puede usar $aliases
. Simplemente agregue nuevos alias a esa propiedad estática dentro de su propia clase y automáticamente heredará todos los alias de la clase Post
principal:
class A extends Corcel Post
{
protected static $ aliases = [
' foo ' => ' post_foo ' ,
];
}
$ a = A:: find ( 1 );
echo $ a -> foo ;
echo $ a -> title ; // from Post class
Para ordenar publicaciones, puede usar los alcances newest()
y oldest()
, tanto para las clases Post
como User
:
$ newest = Post:: newest ()-> first ();
$ oldest = Post:: oldest ()-> first ();
Para ordenar publicaciones simplemente use el método Eloquent paginate()
:
$ posts = Post:: published ()-> paginate ( 5 );
foreach ( $ posts as $ post ) {
// ...
}
Para mostrar los enlaces de paginación simplemente llame al método links()
:
{{ $ posts -> links () }}
Si desea recuperar un campo personalizado creado por el complemento Campos personalizados avanzados (ACF), debe instalar el complemento corcel/acf
(haga clic aquí para obtener más información) y llamar al campo personalizado de esta manera:
$ post = Post:: find ( 123 );
echo $ post -> acf -> some_radio_field ;
$ repeaterFields = $ post -> acf -> my_repeater_name ;
Para evitar consultas SQL innecesarias, simplemente configure el tipo de campo que está solicitando. Por lo general, se necesitan dos consultas SQL para obtener el tipo de campo, por lo que si desea especificarlo, omitirá esas consultas adicionales:
$ post = Post:: find ( 123 );
echo $ post -> acf -> text ( ' text_field_name ' );
echo $ post -> acf -> boolean ( ' boolean_field_name ' );
También puedes trabajar con tipos de publicaciones personalizadas. Puede utilizar el método type(string)
o crear su propia clase.
// 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 ();
El uso del método type()
hará que Corcel devuelva todos los objetos como CorcelPost
. Al utilizar su clase personalizada, tiene la ventaja de personalizar clases, incluidos métodos y propiedades personalizados, devolver todos los objetos como Video
, por ejemplo.
Tipos de publicaciones personalizadas y metadatos:
// 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
}
Cada vez que llamas a algo como Post::type('video)->first()
o Video::first()
recibes una instancia CorcelModelPost
.
Si elige crear una nueva clase para su tipo de publicación personalizada, puede hacer que esta clase se devuelva para todas las instancias de ese tipo de publicación.
En lugar de llamar al método Post::registerPostType()
para todos los tipos de publicaciones personalizadas que desee registrar, simplemente use el archivo de configuración de Corcel y asigne todas las publicaciones personalizadas y sus clases. Se registrarán automáticamente para usted:
' post_types ' => [
' video ' => App Video::class,
' foo ' => App Foo::class,
]
Entonces, cada vez que consulte un tipo de publicación personalizada, se devolverá la instancia asignada.
Esto es particularmente útil cuando desea obtener una colección de publicaciones de diferentes tipos (por ejemplo, al buscar las publicaciones definidas en un menú).
//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 ();
También puedes hacer esto para clases integradas, como Página o Publicación. Simplemente registre la clase Página o Publicación con la cadena de tipo de publicación asociada y se devolverá ese objeto en lugar del predeterminado.
Puede asignar todos los códigos cortos que desee dentro del archivo config/corcel.php
, bajo la clave 'shortcodes'
. En este caso debes crear tu propia clase que implements
la interfaz CorcelShortcode
, que requiere un método render()
:
' shortcodes ' => [
' foo ' => App Shortcodes FooShortcode::class,
' bar ' => App Shortcodes BarShortcode::class,
],
Esta es una clase de código corto de muestra:
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 ' )
);
}
}
Puede agregar códigos cortos llamando al método addShortcode
en el modelo Post
:
// [gallery id="1"]
Post:: addShortcode ( ' gallery ' , function ( $ shortcode ) {
return $ shortcode -> getName () . ' . ' . $ shortcode -> getParameter ( ' id ' );
});
$ post = Post:: find ( 1 );
echo $ post -> content ;
Laravel 5.5 utiliza el descubrimiento automático de paquetes, por lo que no requiere que agregue manualmente el proveedor de servicios
Si está utilizando Laravel, le sugerimos agregar sus controladores de códigos cortos en AppProvidersAppServiceProvider
, en el método boot
.
Los códigos cortos se analizan con la biblioteca Thunderer/shortcode .
Se proporcionan varios analizadores diferentes. RegularParser
es el más correcto técnicamente y se proporciona de forma predeterminada. Esto es adecuado para la mayoría de los casos. Sin embargo, si encuentra algunas irregularidades en el análisis de su shortcode, es posible que necesite configurar Corcel para usar WordpressParser
, que coincide más fielmente con la expresión regular del shortcode de WordPress. Para hacer esto, si está utilizando Laravel, edite el archivo config/corcel.php
y descomente su analizador preferido. Alternativamente, puede reemplazar esto con su propio analizador.
' shortcode_parser ' => Thunder Shortcode Parser RegularParser::class,
// 'shortcode_parser' => ThunderShortcodeParserWordpressParser::class,
Si no estás usando Laravel, puedes hacerlo en tiempo de ejecución, llamando al método setShortcodeParser()
desde cualquier clase que use el rasgo Shortcodes
, como Post
, por ejemplo.
$ post -> setShortcodeParser ( new WordpressParser ());
echo $ post -> content ; // content parsed with "WordpressParser" class
Para obtener más información sobre el paquete de shortcode, haga clic aquí.
Puede obtener taxonomías para una publicación específica como:
$ post = Post:: find ( 1 );
$ taxonomy = $ post -> taxonomies ()-> first ();
echo $ taxonomy -> taxonomy ;
O puedes buscar publicaciones usando sus taxonomías:
$ post = Post:: taxonomy ( ' category ' , ' php ' )-> first ();
También puedes obtener el formato de publicación, como la función de WordPress get_post_format()
:
echo $ post -> getFormat (); // should return something like 'video', etc
Las páginas son como tipos de publicaciones personalizadas. Puede utilizar Post::type('page')
o la clase 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 ;
Obtenga una categoría o taxonomía o cargue publicaciones de una determinada categoría. Hay múltiples formas de lograrlo.
// 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 ;
});
Obtener el archivo adjunto y/o revisión de una Post
o 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 );
Obtener la miniatura de una Post
o 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 ;
Para recuperar un tamaño de miniatura en particular, puede llamar al método ->size()
en el objeto de miniatura y pasar un parámetro de cadena de tamaño de miniatura (por ejemplo, thumbnail
o medium
). Si se ha generado la miniatura, este método devuelve una matriz de metadatos de la imagen; de lo contrario, se devolverá la URL de la imagen original como alternativa.
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 ' ));
}
En versiones anteriores de Corcel, esta clase se llamaba
Options
en lugar deOption
(singular). Así que tenga cuidado de usar siempre esta clase en forma singular a partir dev2.0.0
.
El método
Option::getAll()
se eliminó en Corcel 2+, a favor deOption::asArray($keys [])
.
Puede utilizar la clase Option
para obtener datos de la tabla wp_options
:
$ siteUrl = Option:: get ( ' siteurl ' );
También puedes agregar nuevas opciones:
Option:: add ( ' foo ' , ' bar ' ); // stored as string
Option:: add ( ' baz ' , [ ' one ' => ' two ' ]); // this will be serialized and saved
Puede obtener todas las opciones en una matriz simple:
$ options = Option:: asArray ();
echo $ options [ ' siteurl ' ];
O puede especificar solo las claves que desea obtener:
$ options = Option:: asArray ([ ' siteurl ' , ' home ' , ' blogname ' ]);
echo $ options [ ' home ' ];
Para obtener un menú por su slug, utilice la sintaxis siguiente. Los elementos del menú se cargarán en la variable items
(es una colección de objetos CorcelModelMenuItem
).
Los elementos de menú admitidos actualmente son: páginas, publicaciones, enlaces personalizados y categorías.
Una vez que tenga instancias de la clase MenuItem
, si desea utilizar la instancia original (como la página o el término original, por ejemplo), simplemente llame al método MenuItem::instance()
. El objeto MenuItem
es solo una publicación con post_type
igual a 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
}
El método instance()
devolverá el objeto coincidente:
Post
para el elemento del menú de post
;Page
para el elemento del menú page
;CustomLink
para elemento de menú custom
;Term
para elemento de menú category
.Para manejar menús de varios niveles, recorra todos los elementos del menú para colocarlos en los niveles correctos, por ejemplo.
Puede utilizar el método MenuItem::parent()
para recuperar la instancia principal de ese elemento de menú:
$ items = Menu:: slug ( ' foo ' )-> first ()-> items ;
$ parent = $ items -> first ()-> parent (); // Post, Page, CustomLink or Term (category)
Para agrupar elementos del menú según sus padres, puede usar el método ->groupBy()
en la colección $menu->items
, agrupando los elementos del menú por su $item->parent()->ID
.
Para leer más sobre el método groupBy()
consulte la documentación de Laravel.
Puedes manipular a los usuarios de la misma manera que trabajas con las publicaciones:
// All users
$ users = User:: get ();
// A specific user
$ user = User:: find ( 1 );
echo $ user -> user_login ;
Si está utilizando Laravel 5.4 o anterior, asegúrese de tener registrado el proveedor CorcelServiceProvider
.
Y luego, defina el proveedor de usuario en config/auth.php
para permitir que Laravel inicie sesión con los usuarios de WordPress:
' providers ' => [
' users ' => [
' driver ' => ' corcel ' ,
' model ' => Corcel Model User::class,
],
],
Ahora puedes usar la fachada Auth
para autenticar usuarios:
Auth:: validate ([
' email ' => ' [email protected] ' , // or using 'username' too
' password ' => ' secret ' ,
]);
Para que el restablecimiento de contraseña de Laravel funcione con Corcel, tenemos que anular la forma en que se almacenan las contraseñas en la base de datos. Para hacer esto, debes cambiar Auth/PasswordController.php
de:
use App Http Controllers Controller ;
use Illuminate Foundation Auth ResetsPasswords ;
class PasswordController extends Controller
{
use ResetsPasswords;
a
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;
}
Puede utilizar la clase AuthUserProvider
para autenticar manualmente a un usuario:
$ userProvider = new Corcel Laravel Auth AuthUserProvider ;
$ user = $ userProvider -> retrieveByCredentials ([ ' username ' => ' admin ' ]);
if (! is_null ( $ user ) && $ userProvider -> validateCredentials ( $ user , [ ' password ' => ' admin ' ])) {
// successfully login
}
Recuerde que puede utilizar tanto
username
como
Para ejecutar las pruebas de phpunit, ejecute el siguiente comando:
./vendor/bin/phpunit
Si tiene instalado el comando global phpunit
simplemente puede escribir:
phpunit
Todas las pruebas se escribieron usando Sqlite con la base de datos :memory
, por lo que se ejecuta en su memoria. Todas las pruebas utilizan factories
y migrations
. Eche un vistazo a los directorios tests/database/factories
y tests/database/migrations
para obtener más información.
Todas las contribuciones son bienvenidas para ayudar a mejorar Corcel.
Antes de enviar su solicitud de extracción (PR), considere las siguientes pautas:
Bifurcación https://github.com/corcel/corcel en Github;
Clona tu repositorio bifurcado (no el de Corcel) localmente y crea tu propia rama basada en la versión que deseas arreglar ( 2.1
, 2.2
, 2.3
, 2.4
o 2.5
): git checkout -b my-fix-branch 2.5
;
Realice todos los cambios de código. Recuerde aquí escribir al menos un caso de prueba para cualquier característica que agregue o cualquier corrección de error (si aún no se ha probado). Nuestro objetivo es tener el 100% del código cubierto por pruebas, así que ayúdanos a escribir un código mejor ;-) Si no tienes experiencia con pruebas, es una buena oportunidad para aprender. Simplemente eche un vistazo a nuestros casos de prueba y verá lo simples que son.
Ejecute las pruebas unitarias localmente para asegurarse de que sus cambios no rompan ningún otro fragmento de código;
Inserte su nueva rama en su repositorio bifurcado, normalmente git push origin HEAD
debería funcionar;
Nuevamente en GitHub, cree una solicitud de extracción (PR) desde su rama my-fix-branch
personalizada (de su repositorio bifurcado) a la rama relacionada ( corcel:2.5
, por ejemplo, no corcel:master
, por favor;
Espere la aprobación :-)
Licencia MIT © Junior Grossi