Manual:Bakım betiklerini yazma

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Writing maintenance scripts and the translation is 83% complete.
Other languages:
English • ‎Türkçe • ‎français • ‎português do Brasil • ‎čeština • ‎українська • ‎日本語 • ‎ꯃꯤꯇꯩ ꯂꯣꯟ

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

"Merhaba, Dünya" yazdıran bir helloWorld.php 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):

<?php

/**
 * To the extent possible under law,  I, Mark Hershberger, have waived all copyright and
 * related or neighboring rights to Hello World. This work is published from the
 * United States.
 *
 * @copyright CC0 http://creativecommons.org/publicdomain/zero/1.0/
 * @author Mark A. Hershberger <mah@everybody.org>
 * @ingroup Maintenance
 */

require_once __DIR__ . '/Maintenance.php';

class HelloWorld extends Maintenance {
	public function execute() {
		$this->output( "Hello, World!" );
	}
}

$maintClass = HelloWorld::class;

require_once RUN_MAINTENANCE_IF_MAIN;

Program sadece “Merhaba Dünya!” ancak zaten bir --help (ve diğer komut satırı seçenekleri) vardır. Örnek çıkış:

$ php helloWorld.php
Hello, World!
$ php helloWorld.php --help

Usage: php helloWorld.php [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--profiler|--quiet|--server|--wiki]

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
    --globals: Output globals at the end of processing for debugging
    --memory-limit: Set a specific memory limit for the script, "max"
        for no limit or "default" to avoid changing it
    --server: The protocol and server name to use in URLs, e.g.
        https://en.wikipedia.org. This is sometimes necessary because server name
        detection may fail in command line scripts.
    --profiler: Profiler output format (usually "text")
    --mwdebug: Enable built-in MediaWiki development settings

Script dependant parameters:
    --dbuser: The DB user to use for this script
    --dbpass: The password to use for this script
    --dbgroupdefault: The default DB group to use.

$

Genel bakış:

require_once __DIR__ . "/Maintenance.php";
Maintenance.php öğesini ekliyoruz. Bu, bağımsız değişkenleri ayrıştırma, konsolu okuma, veritabanını alma vb. yöntemlere sahip abstract class Maintenance ile tanımlar.
class HelloWorld extends Maintenance {
Bakım sınıfını genişlettikten sonra,
$maintClass = HelloWorld::class;

require_once RUN_MAINTENANCE_IF_MAIN;
Bakım sınıfına, betiğini yalnızca komut satırından yürütüldüğünde HelloWorld 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.

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 [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--profiler|--quiet|--server|--wiki]
…

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 [--conf|--dbgroupdefault|--dbpass|--dbuser|--globals|--help|--memory-limit|--mwdebug|--name|--profiler|--quiet|--server|--wiki]
…
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->requireExtension( 'FooBar' );
		$this->addOption( 'name', 'Who to say Hello to', false, true );
	}

Çoğunlukla bu, vikide (muhtemelen viki çiftliklerinde) uzantı etkinleştirilmediğinde hoş bir hata mesajı sağlar. Bu yalnızca extension.json kullanan uzantılar için geçerlidir.

Be aware that classes defined by your extension will not be available until hitting the execute-function. Attempts to create instances prior to this, e.g. in the constructor, will cause class not found exceptions.

Writing tests

It's recommended to write tests for your maintenance scripts, like with any other class. See the Maintenance scripts guide for help and examples.