Artisan

Artisan Konsolu

 

giriş

Artisan, Laravel’in içerdiği komut satırı arayüzüdür. Artisan, uygulamanızın kökünde artisankomut dosyası olarak bulunur ve uygulamanızı oluştururken size yardımcı olabilecek bir dizi yararlı komut sağlar. Mevcut tüm Artisan komutlarının bir listesini görüntülemek için şu komutu kullanabilirsiniz list:

php artisan list

Örnek; yukarıda ki komutu verdiğimizde ekrana yazan bilgileri aşağıda bulabilir siniz.

Laravel Framework 9.52.16

Kullanımı:
command [options] [arguments]

Seçenekler:
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Mevcut komutlar:
about Display basic information about your application
clear-compiled Remove the compiled class file
completion Dump the shell completion script
db Start a new database CLI session
docs Access the Laravel documentation
down Put the application into maintenance / demo mode
env Display the current framework environment
help Display help for a command
inspire Display an inspiring quote
list List commands
migrate Run the database migrations
optimize Cache the framework bootstrap files
serve Serve the application on the PHP development server
test Run the application tests
tinker Interact with your application
up Bring the application out of maintenance mode
auth
auth:clear-resets Flush expired password reset tokens
cache
cache:clear Flush the application cache
cache:forget Remove an item from the cache
cache:table Create a migration for the cache database table
coinpayment
coinpayment:activate Activate ladmin coinpayment plugin
coinpayment:install Coinpayment instalation wizard
config
config:cache Create a cache file for faster configuration loading
config:clear Remove the configuration cache file
db
db:monitor Monitor the number of connections on the specified database
db:seed Seed the database with records
db:show Display information about the given database
db:table Display information about the given database table
db:wipe Drop all tables, views, and types
debugbar
debugbar:clear Clear the Debugbar Storage
env
env:decrypt Decrypt an environment file
env:encrypt Encrypt an environment file
event
event:cache Discover and cache the application's events and listeners
event:clear Clear all cached events and listeners
event:generate Generate the missing events and listeners based on registration
event:list List the application's events and listeners
jwt
jwt:generate-certs Generates a new cert pair
jwt:secret Set the JWTAuth secret key used to sign the tokens
key
key:generate Set the application key
make
make:cast Create a new custom Eloquent cast class
make:channel Create a new channel class
make:command Create a new Artisan command
make:component Create a new view component class
make:controller Create a new controller class
make:event Create a new event class
make:exception Create a new custom exception class
make:factory Create a new model factory
make:job Create a new job class
make:listener Create a new event listener class
make:mail Create a new email class
make:middleware Create a new middleware class
make:migration Create a new migration file
make:model Create a new Eloquent model class
make:notification Create a new notification class
make:observer Create a new observer class
make:policy Create a new policy class
make:provider Create a new service provider class
make:request Create a new form request class
make:resource Create a new resource
make:rule Create a new validation rule
make:scope Create a new scope class
make:seeder Create a new seeder class
make:test Create a new test class
migrate
migrate:fresh Drop all tables and re-run all migrations
migrate:install Create the migration repository
migrate:refresh Reset and re-run all migrations
migrate:reset Rollback all database migrations
migrate:rollback Rollback the last database migration
migrate:status Show the status of each migration
model
model:prune Prune models that are no longer needed
model:show Show information about an Eloquent model
notifications
notifications:table Create a migration for the notifications table
optimize
optimize:clear Remove the cached bootstrap files
package
package:discover Rebuild the cached package manifest
queue
queue:batches-table Create a migration for the batches database table
queue:clear Delete all of the jobs from the specified queue
queue:failed List all of the failed queue jobs
queue:failed-table Create a migration for the failed queue jobs database table
queue:flush Flush all of the failed queue jobs
queue:forget Delete a failed queue job
queue:listen Listen to a given queue
queue:monitor Monitor the size of the specified queues
queue:prune-batches Prune stale entries from the batches database
queue:prune-failed Prune stale entries from the failed jobs table
queue:restart Restart queue worker daemons after their current job
queue:retry Retry a failed queue job
queue:retry-batch Retry the failed jobs for a batch
queue:table Create a migration for the queue jobs database table
queue:work Start processing jobs on the queue as a daemon
route
route:cache Create a route cache file for faster route registration
route:clear Remove the route cache file
route:list List all registered routes
sanctum
sanctum:prune-expired Prune tokens expired for more than specified number of hours
schedule
schedule:clear-cache Delete the cached mutex files created by scheduler
schedule:list List all scheduled tasks
schedule:run Run the scheduled commands
schedule:test Run a scheduled command
schedule:work Start the schedule worker
schema
schema:dump Dump the given database schema
session
session:table Create a migration for the session database table
storage
storage:link Create the symbolic links configured for the application
stub
stub:publish Publish all stubs that are available for customization
vendor
vendor:publish Publish any publishable assets from vendor packages
view
view:cache Compile all of the application's Blade templates
view:clear Clear all compiled view files

Umarım yukarıda ki bilgiler sizlere yardımcı oluyordur.

Her komut aynı zamanda komutun mevcut argümanlarını ve seçeneklerini görüntüleyen ve açıklayan bir “yardım” ekranı içerir. Yardım ekranını görüntülemek için komut adının önüne şunu koyun help:

php artisan help migrate

Bu komutu girdiğmizde aşağıdaki bilgiler gelir;

Tanım:
Veritabanı geçişlerini çalıştırın

Kullanımı:
taşıma [seçenekler]

Description:
Run the database migrations

Usage:
migrate [options]

Seçenekler:
–database[=DATABASE] Kullanılacak veritabanı bağlantısı
–force Üretimdeyken işlemi çalıştırmaya zorlayın
–path[=PATH] Yürütülecek geçiş dosyalarının yolu (birden fazla değere izin verilir)
–realpath Sağlanan geçiş dosyası yollarının önceden çözümlenmiş mutlak yollar olduğunu belirtin
–schema-path[=SCHEMA-PATH] Şema döküm dosyasının yolu
–pretend Çalıştırılacak SQL sorgularının dökümünü alın
–seed Çekirdek görevin yeniden çalıştırılması gerekip gerekmediğini belirtir
–seeder[=SEEDER] Kök ekicinin sınıf adı
–step Taşıma işlemlerinin tek tek geri alınabilmesi için çalıştırılmaya zorlanması
–isolated[=ISOLATED] Komutun başka bir örneği zaten çalışıyorsa komutu çalıştırmayın [varsayılan: false]
-h, –help Verilen komut için yardımı görüntüler. Hiçbir komut verilmediğinde liste komutu için yardım görüntüle
-q, –quiet Herhangi bir mesaj çıktısı verme
-V, –version Bu uygulama sürümünü görüntüle
–ansi|–no-ansi ANSI çıkışını zorla (veya devre dışı bırak) –no-ansi
-n, –no-interaction Etkileşimli soru sormayın
–env[=ENV] Komutun altında çalışması gereken ortam
-v|vv|vvv, –verbose Mesajların ayrıntı düzeyini artırın: Normal çıktı için 1, daha ayrıntılı çıktı için 2 ve hata ayıklama için 3

 

Laravel Sail – Yelkeni

Yerel geliştirme ortamınız olarak Laravel Sail’i kullanıyorsanız sailArtisan komutlarını çağırmak için komut satırını kullanmayı unutmayın . Sail, Artisan komutlarınızı uygulamanızın Docker kapsayıcılarında yürütecektir:

./vendor/bin/sail artisan list

 

Tinker (Tamirci) (REPL)

Laravel Tinker (Tamirci), Laravel çerçevesi için PsySH paketi tarafından desteklenen güçlü bir REPL’dir .

 

Kurulumu

 

Tüm Laravel uygulamaları varsayılan olarak Tinker’ı içerir. Ancak Tinker’ı daha önce uygulamanızdan kaldırdıysanız Composer’ı kullanarak yükleyebilirsiniz:

composer require laravel/tinker

Laravel uygulamanızla etkileşimde bulunurken çalışırken yeniden yükleme, çok satırlı kod düzenleme ve otomatik tamamlama mı arıyorsunuz? Tinkerwell’e göz atın !

Kullanım

Tinker, Eloquent modelleriniz, işleriniz, etkinlikleriniz ve daha fazlası dahil olmak üzere Laravel uygulamanızın tamamıyla komut satırı üzerinden etkileşim kurmanıza olanak tanır. Tinker ortamına girmek için tinkerArtisan komutunu çalıştırın:

php artisan tinker

Tinker’in yapılandırma dosyasını şu komutu kullanarak yayınlayabilirsiniz vendor:publish:

php artisan vendor:publish –provider=”Laravel\Tinker\TinkerServiceProvider”

Sınıftaki yardımcı işlev ve yöntem, işi dispatchkuyruğa yerleştirmek için çöp toplamaya bağlıdır. Bu nedenle, tinker’ı kullanırken işleri dağıtmak için veya kullanmalısınız .dispatchDispatchableBus::dispatchQueue::push

 

Komut İzin Listesi

Tinker, kabuğunda hangi Artisan komutlarının çalıştırılmasına izin verildiğini belirlemek için bir “izin ver” listesi kullanır. Varsayılan olarak clear-compileddownenvinspiremigrateoptimizeve komutlarını çalıştırabilirsiniz up. Daha fazla komuta izin vermek istiyorsanız bunları yapılandırma commandsdosyanızdaki diziye ekleyebilirsiniz tinker.php:

‘commands’ => [
// App\Console\Commands\ExampleCommand::class,
],

 

Takma Ad Kullanılmaması Gereken Sınıflar

Tipik olarak Tinker, Tinker’da onlarla etkileşim kurduğunuzda sınıflara otomatik olarak takma ad verir. Ancak bazı sınıflara asla takma ad vermemek isteyebilirsiniz. Bunu , yapılandırma dosyanızın dont_aliasdizisindeki sınıfları listeleyerek gerçekleştirebilirsiniz :tinker.php

‘dont_alias’ => [
App\Models\User::class,
],

 

Komut Yazma

Artisan ile sağlanan komutlara ek olarak kendi özel komutlarınızı oluşturabilirsiniz. Komutlar genellikle dizinde saklanır app/Console/Commands; ancak komutlarınız Composer tarafından yüklenebildiği sürece kendi depolama konumunuzu seçmekte özgürsünüz.

 

Komut Oluşturma

Yeni bir komut oluşturmak için Artisan komutunu kullanabilirsiniz make:command. Bu komut dizinde yeni bir komut sınıfı yaratacaktır app/Console/Commands. Bu dizin uygulamanızda yoksa endişelenmeyin; Artisan komutunu ilk kez çalıştırdığınızda oluşturulacaktır make:command:

php artisan make:command SendEmails

 

Komut Yapısı

Komutunuzu oluşturduktan sonra sınıfın signatureve özelliklerine uygun değerleri tanımlamalısınız . descriptionBu özellikler, komutunuzu ekranda görüntülerken kullanılacaktır list. Bu özellik ayrıca komutunuzun giriş beklentilerinisignature tanımlamanıza da olanak tanır . Komutunuz yürütüldüğünde yöntem çağrılacaktır . Komut mantığınızı bu yönteme yerleştirebilirsiniz.handle

Örnek bir komuta bakalım. İhtiyacımız olan tüm bağımlılıkları komutun yöntemi aracılığıyla isteyebileceğimizi unutmayın handle. Laravel hizmet kapsayıcısı, bu yöntemin imzasında tür ipuçları verilen tüm bağımlılıkları otomatik olarak enjekte edecektir:

<?php
 
namespace App\Console\Commands;
 
use App\Models\User;
use App\Support\DripEmailer;
use Illuminate\Console\Command;
 
class SendEmails extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = ‘mail:send {user}’;
 
/**
* The console command description.
*
* @var string
*/
protected $description = ‘Send a marketing email to a user’;
 
/**
* Execute the console command.
*/
public function handle(DripEmailer $drip): void
{
$drip->send(User::find($this->argument(‘user’)));
}
}

Kodun daha fazla yeniden kullanımı için, konsol komutlarınızı hafif tutmak ve görevlerini yerine getirmek için uygulama hizmetlerine ertelemelerine izin vermek iyi bir uygulamadır. Yukarıdaki örnekte, e-posta göndermenin “ağır yükünü” üstlenmek için bir hizmet sınıfı enjekte ettiğimizi unutmayın.

 

Kapatma Komutları

Kapatma tabanlı komutlar, konsol komutlarını sınıflar olarak tanımlamaya bir alternatif sağlar. Rota kapanışlarının denetleyicilere bir alternatif olduğu gibi, komut kapanışlarını da komut sınıflarına bir alternatif olarak düşünün.

Dosya HTTP rotalarını tanımlamasa da routes/console.phpuygulamanıza konsol tabanlı giriş noktalarını (rotaları) tanımlar. Bu dosya içerisinde tüm kapatma tabanlı konsol komutlarınızı yöntemini kullanarak tanımlayabilirsiniz Artisan::command. Yöntem commandiki argümanı kabul eder: komut imzası ve komutun argümanlarını ve seçeneklerini alan bir kapanış:

Artisan::command(‘mail:send {user}’, function (string $user) {
$this->info(“Sending email to: {$user}!”);
});

Kapatma, temeldeki komut örneğine bağlıdır, dolayısıyla tam komut sınıfında genellikle erişebileceğiniz tüm yardımcı yöntemlere tam erişime sahip olursunuz.

 

Tip-İpucu Bağımlılıkları

Komutunuzun argümanlarını ve seçeneklerini almanın yanı sıra, komut kapanışları aynı zamanda hizmet kapsayıcısının dışında çözülmesini istediğiniz ek bağımlılıkları da belirtebilir :

use App\Models\User;
use App\Support\DripEmailer;
 
Artisan::command(‘mail:send {user}’, function (DripEmailer $drip, string $user) {
$drip->send(User::find($user));
});

 

Kapatma Komutu Açıklamaları

purposeKapatmaya dayalı bir komut tanımlarken, komuta bir açıklama eklemek için yöntemi kullanabilirsiniz . Bu açıklama php artisan listveya komutlarını çalıştırdığınızda görüntülenecektir php artisan help:

Artisan::command(‘mail:send {user}’, function (string $user) {
// …
})->purpose(‘Send a marketing email to a user’);

 

Yalıtılabilir Komutlar

Bu özelliği kullanmak için uygulamanızın, uygulamanızın varsayılan önbellek sürücüsü olarak memcachedredisdynamodbdatabasefileveya önbellek sürücüsünü kullanıyor olması gerekir. arrayAyrıca tüm sunucuların aynı merkezi önbellek sunucusuyla iletişim kurması gerekir.

Bazen bir komutun yalnızca bir örneğinin aynı anda çalışabileceğinden emin olmak isteyebilirsiniz. Bunu başarmak için Illuminate\Contracts\Console\Isolatablearayüzü komut sınıfınıza uygulayabilirsiniz :

<?php
 
namespace App\Console\Commands;
 
use Illuminate\Console\Command;
use Illuminate\Contracts\Console\Isolatable;
 
class SendEmails extends Command implements Isolatable
{
// …
}

Bir komut olarak işaretlendiğinde Laravel komuta Isolatableotomatik olarak bir seçenek ekleyecektir . --isolatedKomut bu seçenekle çağrıldığında Laravel, bu komutun başka hiçbir örneğinin halihazırda çalışmadığından emin olacaktır. Laravel bunu, uygulamanızın varsayılan önbellek sürücüsünü kullanarak bir atomik kilit elde etmeye çalışarak başarır. Komutun diğer örnekleri çalışıyorsa komut yürütülmez; ancak komut yine de başarılı bir çıkış durum koduyla çıkılacaktır:

php artisan mail:send 1 –isolated

Komutun yürütülememesi durumunda döndürmesi gereken çıkış durum kodunu belirtmek isterseniz, istenen durum kodunu şu isolatedseçenek aracılığıyla sağlayabilirsiniz:

php artisan mail:send 1 –isolated=12

 

Kimliği kilitle

Varsayılan olarak Laravel, uygulamanızın önbelleğindeki atomik kilidi elde etmek için kullanılan dize anahtarını oluşturmak için komutun adını kullanacaktır. Ancak isolatableIdArtisan komut sınıfınızda, komutun argümanlarını veya seçeneklerini anahtara entegre etmenize olanak tanıyan bir yöntem tanımlayarak bu anahtarı özelleştirebilirsiniz :

/**
* Get the isolatable ID for the command.
*/
public function isolatableId(): string
{
return $this->argument(‘user’);
}

 

Kilit Sona Erme Süresi

Varsayılan olarak, komut tamamlandıktan sonra izolasyon kilitlerinin süresi dolar. Veya komut kesilirse ve bitirilemezse kilit bir saat sonra sona erer. Ancak isolationLockExpiresAtkomutunuz üzerinde bir yöntem tanımlayarak kilidin geçerlilik süresini ayarlayabilirsiniz :

use DateTimeInterface;
use DateInterval;
 
/**
* Determine when an isolation lock expires for the command.
*/
public function isolationLockExpiresAt(): DateTimeInterface|DateInterval
{
return now()->addMinutes(5);
}

 

Girdi Beklentilerini Tanımlama

Konsol komutları yazarken, argümanlar veya seçenekler aracılığıyla kullanıcıdan girdi toplamak yaygındır. Laravel, signaturekomutlarınızdaki özelliği kullanarak kullanıcıdan beklediğiniz girişi tanımlamayı çok kullanışlı hale getirir . Özellik signature, komutun adını, bağımsız değişkenlerini ve seçeneklerini tek, anlamlı, rota benzeri bir sözdiziminde tanımlamanıza olanak tanır.

 

Argümanlar

Kullanıcı tarafından sağlanan tüm argümanlar ve seçenekler küme parantezleri içine alınmıştır. Aşağıdaki örnekte komut, gerekli bir bağımsız değişkeni tanımlar: user:

/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = ‘mail:send {user}’;

Ayrıca bağımsız değişkenleri isteğe bağlı hale getirebilir veya bağımsız değişkenler için varsayılan değerleri tanımlayabilirsiniz:

// Optional argument…
‘mail:send {user?}’
 
// Optional argument with default value…
‘mail:send {user=foo}’

 

Seçenekler

Argümanlar gibi seçenekler de kullanıcı girişinin başka bir biçimidir. --Komut satırı aracılığıyla sağlandığında seçeneklerin önüne iki tire ( ) eklenir . İki tür seçenek vardır: değer alanlar ve almayanlar. Değer almayan seçenekler boolean “anahtar” görevi görür. Bu tür seçeneğin bir örneğine bakalım:

/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = ‘mail:send {user} {–queue}’;

Bu örnekte, --queueArtisan komutu çağrılırken anahtar belirtilebilir. Eğer --queuegeçiş yapılırsa seçeneğin değeri olacaktır true. Aksi takdirde değer şöyle olacaktır false:

php artisan mail:send 1 –queue

 

Değerleri Olan Seçenekler

Şimdi değer bekleyen bir seçeneğe bakalım. Kullanıcının bir seçenek için bir değer belirtmesi gerekiyorsa seçenek adının sonuna bir işaret eklemelisiniz =:

/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = ‘mail:send {user} {–queue=}’;

Bu örnekte kullanıcı şu şekilde seçenek için bir değer iletebilir. Komut çağrılırken seçenek belirtilmezse değeri şöyle olacaktır null:

php artisan mail:send 1 –queue=default

Seçenek adından sonra varsayılan değeri belirterek seçeneklere varsayılan değerler atayabilirsiniz. Kullanıcı tarafından hiçbir seçenek değeri aktarılmazsa varsayılan değer kullanılacaktır:

‘mail:send {user} {–queue=default}’

 

Seçenek Kısayolları

Bir seçeneği tanımlarken bir kısayol atamak için, bunu seçenek adından önce belirtebilir ve |kısayolu tam seçenek adından ayırmak için karakteri sınırlayıcı olarak kullanabilirsiniz:

‘mail:send {user} {–Q|queue}’

Komutu terminalinizde çalıştırırken, seçenek kısayollarının önüne tek bir tire konulmalı ve =seçenek için bir değer belirtilirken hiçbir karakter dahil edilmemelidir:

php artisan mail:send 1 -Qdefault

 

Giriş Dizileri

Birden fazla giriş değeri bekleyecek argümanları veya seçenekleri tanımlamak isterseniz karakteri kullanabilirsiniz *. Öncelikle böyle bir argümanı belirten bir örneğe bakalım:

‘mail:send {user*}’

Bu yöntemi çağırırken argümanlar userkomut satırına aktarılabilir. Örneğin, aşağıdaki komut user, bir diziye değerini 1ve 2değerleri olarak ayarlayacaktır:

php artisan mail:send 1 2

Bu *karakter, bir argümanın sıfır veya daha fazla örneğine izin vermek için isteğe bağlı bir argüman tanımıyla birleştirilebilir:

‘mail:send {user?*}’

 

Seçenek Dizileri

Birden fazla giriş değeri bekleyen bir seçeneği tanımlarken, komuta iletilen her seçenek değerinin önüne seçenek adı eklenmelidir:

‘mail:send {–id=*}’

Böyle bir komut birden fazla argüman iletilerek çağrılabilir --id:

php artisan mail:send –id=1 –id=2

 

Giriş Açıklamaları

Bağımsız değişken adını açıklamadan iki nokta üst üste işaretiyle ayırarak giriş bağımsız değişkenlerine ve seçeneklerine açıklamalar atayabilirsiniz. Komutunuzu tanımlamak için biraz daha fazla alana ihtiyacınız varsa, tanımı birden fazla satıra yaymaktan çekinmeyin:

/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = ‘mail:send
{user : The ID of the user}
{–queue : Whether the job should be queued}’;

 

Eksik Giriş İstemi

Komutunuz gerekli argümanları içeriyorsa, bunlar sağlanmadığında kullanıcı bir hata mesajı alacaktır. Alternatif olarak, arayüzü uygulayarak komutunuzu, gerekli argümanlar eksik olduğunda kullanıcıya otomatik olarak bilgi verecek şekilde yapılandırabilirsiniz PromptsForMissingInput:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

use Illuminate\Contracts\Console\PromptsForMissingInput;

class SendEmails extends Command implements PromptsForMissingInput

{

/**

* The name and signature of the console command.

*
* @var string
*/
protected $signature = ‘mail:send {user}’;
 
// …
}
 

Laravel’in kullanıcıdan gerekli bir argüman toplaması gerekiyorsa, argüman adını veya açıklamasını kullanarak soruyu akıllıca ifade ederek kullanıcıdan otomatik olarak argümanı isteyecektir. Gerekli argümanı toplamak için kullanılan soruyu özelleştirmek isterseniz, promptForMissingArgumentsUsingargüman adlarıyla anahtarlanan bir dizi soru döndürerek yöntemi uygulayabilirsiniz:

/**
* Prompt for missing input arguments using the returned questions.
*
* @return array<string, string>
*/
protected function promptForMissingArgumentsUsing(): array
{
return [
'user'=>'Which user ID should receive the mail?',
];
}

 

Soruyu ve yer tutucuyu içeren bir demet kullanarak yer tutucu metni de sağlayabilirsiniz:

return [
'user'=> ['Which user ID should receive the mail?', 'E.g. 123'],
];
 

Bilgi istemi üzerinde tam kontrol istiyorsanız, kullanıcıyı uyaracak ve yanıtını döndürecek bir kapatma sağlayabilirsiniz:

use App\Models\User;
use function Laravel\Prompts\search;
 
// ...
 
return [
'user'=>fn() => search(
label: 'Search for a user:',
placeholder: 'E.g. Taylor Otwell',
options: fn ($value) => strlen($value) > 0
?User::where('name','like',"%{$value}%")->pluck('name','id')->all()
:[]
),
];

Kapsamlı Laravel İstemleri belgeleri, mevcut istemler ve bunların kullanımına ilişkin ek bilgiler içerir.

Kullanıcının seçenekleri seçmesini veya girmesini istemek istiyorsanız , komut yönteminize istemleri dahil edebilirsiniz handle. Bununla birlikte, kullanıcıya yalnızca eksik argümanlar için otomatik olarak sorulduğunda soru sormak istiyorsanız, o zaman yöntemi uygulayabilirsiniz afterPromptingForMissingArguments:

use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use function Laravel\Prompts\confirm;
 
// ...
 
/**
* Perform actions after the user was prompted for missing arguments.
*/
protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output): void
{
$input->setOption('queue', confirm(
label: 'Would you like to queue the mail?',
default: $this->option('queue')
));
}
 

Komut G/Ç

Giriş Alma

 

Komutunuz yürütülürken büyük olasılıkla komutunuz tarafından kabul edilen argümanların ve seçeneklerin değerlerine erişmeniz gerekecektir. Bunu yapmak için argumentve yöntemlerini kullanabilirsiniz option. Bir argüman veya seçenek mevcut değilse nulldöndürülür:

$arguments = $this->arguments();

 

Seçenekler, yöntem kullanılarak argümanlar kadar kolay bir şekilde alınabilir option. Tüm seçenekleri bir dizi olarak almak için optionsyöntemi çağırın:

// Retrieve a specific option...
$queueName = $this->option('queue');
 
// Retrieve all options as an array...
$options = $this->options();
 

Giriş İstemi

Laravel Prompts , yer tutucu metin ve doğrulama gibi tarayıcı benzeri özelliklere sahip, komut satırı uygulamalarınıza güzel ve kullanıcı dostu formlar eklemenizi sağlayan bir PHP paketidir.

Çıktıyı görüntülemenin yanı sıra, kullanıcıdan komutunuzun yürütülmesi sırasında girdi sağlamasını da isteyebilirsiniz. Yöntem ask, kullanıcıya verilen soruyu soracak, girdilerini kabul edecek ve ardından kullanıcının girdisini komutunuza geri döndürecektir:

/**
* Execute the console command.
*/
public function handle(): void
{
$name = $this->ask(‘What is your name?’);
 
// …
}

Yöntem askayrıca, kullanıcı girişi sağlanmadığı takdirde döndürülmesi gereken varsayılan değeri belirten isteğe bağlı ikinci bir bağımsız değişkeni de kabul eder:

$name = $this->ask(‘What is your name?’, ‘Taylor’);

Yöntem, yöntemine secretbenzer askancak kullanıcının girişi, konsola yazarken onlar tarafından görülemez. Bu yöntem, şifreler gibi hassas bilgiler istendiğinde kullanışlıdır:

$password = $this->secret(‘What is the password?’);

 

Onay istemek

Kullanıcıdan basit bir “evet veya hayır” onayı istemeniz gerekiyorsa bu confirmyöntemi kullanabilirsiniz. Varsayılan olarak bu yöntem geri dönecektir false. Ancak kullanıcı istemi girerse yveya yesyanıt verirse yöntem geri döner true.

if ($this->confirm(‘Do you wish to continue?’)) {
// …
}

Gerekirse, yönteme ikinci argüman olarak trueileterek onay isteminin varsayılan olarak geri dönmesi gerektiğini belirtebilirsiniz :trueconfirm

if ($this->confirm(‘Do you wish to continue?’, true)) {
// …
}

 

Otomatik Tamamlama

Yöntem anticipate, olası seçimler için otomatik tamamlama sağlamak amacıyla kullanılabilir. Otomatik tamamlama ipuçlarına bakılmaksızın kullanıcı yine de herhangi bir yanıt verebilir:

$name = $this->anticipate(‘What is your name?’, [‘Taylor’, ‘Dayle’]);

Alternatif olarak, yönteme ikinci argüman olarak bir kapanış iletebilirsiniz anticipate. Kullanıcı her giriş karakteri yazdığında kapatma çağrılacaktır. Kapatma, kullanıcının o ana kadarki girişini içeren bir dize parametresini kabul etmeli ve otomatik tamamlama için bir dizi seçenek döndürmelidir:

$name = $this->anticipate(‘What is your address?’, function (string $input) {
// Return auto-completion options…
});

 

Çoktan seçmeli sorular

Soru sorarken kullanıcıya önceden tanımlanmış bir dizi seçenek vermeniz gerekiyorsa bu yöntemi kullanabilirsiniz choice. Hiçbir seçenek seçilmediğinde döndürülecek varsayılan değerin dizi indeksini, indeksi yönteme üçüncü argüman olarak ileterek ayarlayabilirsiniz:

$name = $this->choice(
‘What is your name?’,
[‘Taylor’, ‘Dayle’],
$defaultIndex
);

Ek olarak choiceyöntem, geçerli bir yanıt seçmek için maksimum deneme sayısını ve birden fazla seçime izin verilip verilmediğini belirlemek için isteğe bağlı dördüncü ve beşinci bağımsız değişkenleri kabul eder:

$name = $this->choice(
‘What is your name?’,
[‘Taylor’, ‘Dayle’],
$defaultIndex,
$maxAttempts = null,
$allowMultipleSelections = false
);

 

Çıkış Yazma

Çıktıyı konsola göndermek için lineinfocommentquestionwarnve erroryöntemlerini kullanabilirsiniz. Bu yöntemlerin her biri, amaçlarına uygun ANSI renklerini kullanacaktır. Örneğin kullanıcıya bazı genel bilgileri görüntüleyelim. Genellikle infoyöntem konsolda yeşil renkli metin olarak görüntülenir:

/**
* Execute the console command.
*/
public function handle(): void
{
// …
 
$this->info(‘The command was successful!’);
}

Bir hata mesajı görüntülemek için yöntemi kullanın error. Hata mesajı metni genellikle kırmızı renkte görüntülenir:

$this->error(‘Something went wrong!’);

lineDüz, renksiz metni görüntülemek için bu yöntemi kullanabilirsiniz :

$this->line(‘Display this on the screen’);

newLineBoş bir satır görüntülemek için yöntemi kullanabilirsiniz :

// Write a single blank line…
$this->newLine();
 
// Write three blank lines…
$this->newLine(3);

 

Tablolar

Yöntem table, birden fazla veri satırını/sütununu doğru şekilde biçimlendirmeyi kolaylaştırır. Tek yapmanız gereken tablonun sütun adlarını ve verilerini sağlamaktır; Laravel sizin için tablonun uygun genişliğini ve yüksekliğini otomatik olarak hesaplayacaktır:

use App\Models\User;
 
$this->table(
[‘Name’, ‘Email’],
User::all([‘name’, ’email’])->toArray()
);

 

İlerleme Çubukları

Uzun süren görevler için, kullanıcılara görevin ne kadar tamamlandığını bildiren bir ilerleme çubuğu göstermek yararlı olabilir. Bu yöntemi kullanarak withProgressBarLaravel bir ilerleme çubuğu görüntüleyecek ve her yineleme için ilerlemesini belirli bir yinelenebilir değer üzerinden ilerletecektir:

use App\Models\User;
 
$users = $this->withProgressBar(User::all(), function (User $user) {
$this->performTask($user);
});

Bazen ilerleme çubuğunun nasıl ilerletileceği konusunda daha fazla manuel kontrole ihtiyacınız olabilir. İlk olarak, sürecin yineleneceği toplam adım sayısını tanımlayın. Ardından, her öğeyi işledikten sonra ilerleme çubuğunu ilerletin:

$users = App\Models\User::all();
 
$bar = $this->output->createProgressBar(count($users));
 
$bar->start();
 
foreach ($users as $user) {
$this->performTask($user);
 
$bar->advance();
}
 
$bar->finish();

 

Komutları Kaydetme

Varsayılan olarak Laravel dizindeki tüm komutları otomatik olarak kaydeder app/Console/Commands. Ancak withCommandsuygulamanızın dosyasındaki yöntemi kullanarak Laravel’e Artisan komutları için diğer dizinleri taraması talimatını verebilirsiniz bootstrap/app.php:

->withCommands([
__DIR__.’/../app/Domain/Orders/Commands’,
])

Gerekirse, komutun sınıf adını yönteme sağlayarak komutları manuel olarak da kaydedebilirsiniz withCommands:

use App\Domain\Orders\Commands\SendEmails;
 
->withCommands([
SendEmails::class,
])

Artisan boot ettiğinde uygulamanızdaki tüm komutlar servis konteyneri tarafından çözümlenecek ve Artisan’a kaydedilecektir.

 

Program Aracılığıyla Komutları Yürütme

Bazen bir Artisan komutunu CLI dışında yürütmek isteyebilirsiniz. Örneğin, bir rotadan veya denetleyiciden bir Artisan komutunu yürütmek isteyebilirsiniz. Bunu gerçekleştirmek için callcephedeki yöntemi kullanabilirsiniz Artisan. Yöntem call, ilk argüman olarak komutun imza adını veya sınıf adını ve ikinci argüman olarak bir dizi komut parametresini kabul eder. Çıkış kodu döndürülecek:

use Illuminate\Support\Facades\Artisan;
 
Route::post(‘/user/{user}/mail’, function (string $user) {
$exitCode = Artisan::call(‘mail:send’, [
‘user’ => $user, ‘–queue’ => ‘default’
]);
 
// …
});

callAlternatif olarak, Artisan komutunun tamamını yönteme bir dize olarak iletebilirsiniz :

Artisan::call(‘mail:send 1 –queue=default’);

 

Dizi Değerlerini Geçirme

Komutunuz bir diziyi kabul eden bir seçeneği tanımlıyorsa, bu seçeneğe bir dizi değer iletebilirsiniz:

use Illuminate\Support\Facades\Artisan;
 
Route::post(‘/mail’, function () {
$exitCode = Artisan::call(‘mail:send’, [
‘–id’ => [5, 13]
]);
});

 

Boolean Değerlerini Geçme

--forceKomuttaki bayrak gibi dize değerlerini kabul etmeyen bir seçeneğin değerini belirtmeniz gerekiyorsa , seçeneğin değeri olarak veya değerini migrate:refreshgeçmelisiniz :truefalse

$exitCode = Artisan::call(‘migrate:refresh’, [
‘–force’ => true,
]);

 

Zanaatkar Komutlarını Sıraya Alma

queueCephedeki yöntemi kullanarak ArtisanArtisan komutlarını sıraya koyabilirsiniz, böylece kuyruk çalışanlarınız tarafından arka planda işlenirler . Bu yöntemi kullanmadan önce kuyruğunuzu yapılandırdığınızdan ve bir kuyruk dinleyicisi çalıştırdığınızdan emin olun:

use Illuminate\Support\Facades\Artisan;
 
Route::post(‘/user/{user}/mail’, function (string $user) {
Artisan::queue(‘mail:send’, [
‘user’ => $user, ‘–queue’ => ‘default’
]);
 
// …
});

onConnectionand yöntemlerini kullanarak onQueueArtisan komutunun gönderilmesi gereken bağlantıyı veya kuyruğu belirtebilirsiniz:

Artisan::queue(‘mail:send’, [
‘user’ => 1, ‘–queue’ => ‘default’
])->onConnection(‘redis’)->onQueue(‘commands’);

 

Diğer Komutlardan Komutları Çağırma

Bazen mevcut bir Artisan komutundan başka komutları çağırmak isteyebilirsiniz. Yöntemi kullanarak bunu yapabilirsiniz call. Bu callyöntem, komut adını ve bir dizi komut argümanı/seçeneğini kabul eder:

/**
* Execute the console command.
*/
public function handle(): void
{
$this->call(‘mail:send’, [
‘user’ => 1, ‘–queue’ => ‘default’
]);
 
// …
}

Başka bir konsol komutunu çağırmak ve onun tüm çıktısını bastırmak istiyorsanız bu callSilentlyyöntemi kullanabilirsiniz. Yöntem callSilently, yöntemle aynı imzaya sahiptir call:

$this->callSilently(‘mail:send’, [
‘user’ => 1, ‘–queue’ => ‘default’
]);

 

Sinyal İşleme

Bildiğiniz gibi işletim sistemleri çalışan işlemlere sinyal gönderilmesine olanak sağlar. Örneğin SIGTERMsinyal, işletim sistemlerinin bir programın sonlandırılmasını nasıl talep ettiğidir. Artisan konsolu komutlarınızdaki sinyalleri dinlemek ve oluştuğunda kodu çalıştırmak istiyorsanız, şu trapyöntemi kullanabilirsiniz:

/**
* Execute the console command.
*/
public function handle(): void
{
$this->trap(SIGTERM, fn () => $this->shouldKeepRunning = false);
 
while ($this->shouldKeepRunning) {
// …
}
}

Aynı anda birden fazla sinyali dinlemek için yönteme bir sinyal dizisi sağlayabilirsiniz trap:

$this->trap([SIGTERM, SIGQUIT], function (int $signal) {

$this->shouldKeepRunning = false
 
dump($signal); // SIGTERM / SIGQUIT
});

 

Saplama Özelleştirme

Artisan konsolunun makekomutları denetleyiciler, işler, geçişler ve testler gibi çeşitli sınıflar oluşturmak için kullanılır. Bu sınıflar, girişinize dayalı olarak değerlerle doldurulan “taslak” dosyalar kullanılarak oluşturulur. Ancak Artisan tarafından oluşturulan dosyalarda küçük değişiklikler yapmak isteyebilirsiniz. Bunu başarmak için, stub:publishen yaygın taslakları uygulamanızda yayınlamak ve böylece bunları özelleştirmek üzere bu komutu kullanabilirsiniz :

php artisan stub:publish

stubsYayınlanan taslaklar uygulamanızın kökündeki bir dizinde yer alacaktır . Bu taslaklarda yaptığınız herhangi bir değişiklik, Artisan’ın komutlarını kullanarak karşılık gelen sınıfları oluşturduğunuzda yansıtılacaktır make.

 

Olaylar

Artisan, komutları çalıştırırken üç olay gönderir: Illuminate\Console\Events\ArtisanStartingIlluminate\Console\Events\CommandStarting, ve Illuminate\Console\Events\CommandFinishedArtisanStartingArtisan çalışmaya başladığında etkinlik hemen gönderilir . Daha sonra olay, CommandStartingbir komut çalıştırılmadan hemen önce gönderilir. Son olarak, CommandFinishedbir komutun yürütülmesi bittiğinde olay gönderilir.

0 0 votes
Article Rating
Subscribe
Bildir
guest

0 Yorum
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x