Manual:Bakım betiklerini yazma
Bu, komut satırı MediaWiki bakım betikleri yazmayı kolaylaştırmak için MediaWiki 1.16'da sunulan Maintenance
sınıfına (Maintenance.php sayfasına bakın) dayalı bir bakım betik yazma konusunda adım adım açıklamalı bir öğreticidir.
Örnek betik
helloWorld.php
yazdıran bir "Hello, World" bakım betiği üzerinden geçeceğiz. Bu program, çalışması için gereken minimum kod miktarını ve beklenen telif hakkı başlığını içerir (alternatif başlıklar için telif hakkı başlıkları sayfasına bakın):
The below example program will print "Hello, World!":
$ php helloWorld.php Hello, World!
MediaWiki core
<?php
require_once __DIR__ . '/Maintenance.php';
/**
* Brief oneline description of Hello world.
*
* @since 1.17
* @ingroup Maintenance
*/
class HelloWorld extends Maintenance {
public function execute() {
$this->output( 'Hello, World!' );
}
}
$maintClass = HelloWorld::class;
require_once RUN_MAINTENANCE_IF_MAIN;
MediaWiki extension
<?php
namespace MediaWiki\Extension\Example\Maintenance;
$IP = getenv( 'MW_INSTALL_PATH' );
if ( $IP === false ) {
$IP = __DIR__ . '/../../..';
}
require_once "$IP/maintenance/Maintenance.php";
/**
* Brief oneline description of Hello world.
*/
class HelloWorld extends Maintenance {
public function __construct() {
parent::__construct();
$this->requireExtension( 'Extension' );
}
public function execute() {
$this->output( 'Hello, World!' );
}
}
$maintClass = HelloWorld::class;
require_once RUN_MAINTENANCE_IF_MAIN;
Boilerplate explained
require_once __DIR__ . "/Maintenance.php";
Maintenance.php
dosyasını dahil ediyoruz. Bu, bağımsız değişkenleri ayrıştırmak, konsolu okumak, veritabanını almak vb. için yöntemi olanclass Maintenance
ile tanımlar. $3 için tam yolu kullanmak en iyisidir.
class HelloWorld extends Maintenance {
- Maintenance sınıfını genişlettikten sonra,
$maintClass = HelloWorld::class;
require_once RUN_MAINTENANCE_IF_MAIN;
HelloWorld
sınıfına, betiğini yalnızca komut satırından yürütüldüğünde Maintenance sınıfımızı kullanarak çalıştırmasını söyleyin.
Dahili olarak, RUN_MAINTENANCE_IF_MAIN
, MediaWiki sınıflarını ve yapılandırmasını otomatik olarak yükleyen başka bir dosya doMaintenance.php yükler ve ardından
public function execute() {
- Tanımladığımız
execute()
işlevi yürütülür ve betiğimiz çalışmasını yapar.
When our program is run from the command-line, the core maintenance framework will take care of initialising MediaWiki core and configuration etc, and then it will invoke this method.
Help command
One of the built-in features that all maintenance scripts enjoy is a --help
option. The above example boilerplate would produce the following help page:
$ php helloWorld.php --help Usage: php helloWorld.php […] Generic maintenance parameters: --help (-h): Display this help message --quiet (-q): Whether to suppress non-error output --conf: Location of LocalSettings.php, if not default --wiki: For specifying the wiki ID --server: The protocol and server name to use in URL --profiler: Profiler output format (usually "text") …
Bir açıklama ekleme
"Peki bu bakım betiği ne için?" Sorduğunu duyabiliyorum.
Yapımcımızdaki addDescription
yöntemini kullanarak "--help
" çıkışının üstüne bir açıklama koyabiliriz:
public function __construct() {
parent::__construct();
$this->addDescription( 'Say hello.' );
}
Çıkış şimdi bize açıklama veriyor:
$ php helloWorld.php --help Say hello. Usage: php helloWorld.php [--help] …
Seçenek ve bağımsız değişken ayrıştırma
Dünyayı selamlamak iyi ve güzeldir, ancak biz de bireyleri selamlamak istiyoruz.
Bir komut satırı seçeneği eklemek için class HelloWorld
ile Maintenance
komutun addOption()
ile çağıran bir yapıcı ekleyin ve execute()
yöntemini kullanarak yeni seçeneği kullanın.
addOption()
ile parametreleri $name, $description, $required = false, $withArg = false, $shortName = false
, yani:
public function __construct() {
parent::__construct();
$this->addDescription( 'Say hello.' );
$this->addOption( 'name', 'Who to say Hello to', false, true );
}
public function execute() {
$name = $this->getOption( 'name', 'World' );
$this->output( "Hello, $name!" );
}
Bu kez, yürütüldüğünde, helloWorld.php
betiğinin çıkışı sağlanan bağımsız değişkene bağlı olarak değişir:
$ php helloWorld.php Hello, World! $ php helloWorld.php --name=Mark Hello, Mark! $ php helloWorld.php --help Say hello. Usage: php helloWorld.php […] … Script specific parameters: --name: Who to say Hello to
Uzantılar
MediaWiki sürümü: | ≥ 1.28 Gerrit change 301709 |
Bakım betiğiniz bir uzantı içinse, uzantının yüklü olması için bir gereksinim eklemeniz gerekir:
public function __construct() {
parent::__construct();
$this->addOption( 'name', 'Who to say Hello to' );
$this->requireExtension( 'FooBar' );
}
Çoğunlukla bu, vikide (muhtemelen viki çiftliklerinde) uzantı etkinleştirilmediğinde hoş bir hata mesajı sağlar. For example, during local development a particular extension might not yet be enabled in LocalSettings.php, or when operating a wiki farm an extension might be enabled on a subset of wikis.
Uzantınız tarafından tanımlanan sınıfların, execute()
işlevine ulaşana kadar kullanılamayacağını unutmayın.
Bundan önce örnekler oluşturma girişimleri, ör. yapıcıda, sınıfın bulunmayan istisnalara neden olur.
Yazma testleri
Diğer sınıflarda olduğu gibi bakım betiğiniz için testler yazmanız önerilir. Yardım ve örnekler için Bakım betikleri kılavuzuna bakın.