لاراول شامل یک REPL قدرتمند به نام Tinker هست که توسط PsySH console قدرت گرفته است. کنسول Tinker به شما اجازه میده که با اپلیکیشن لاراول از طریق دستورات command line ارتباط برقرار کنید.
Tinker قسمتی از پکیج laravel/framework هست اما با انتشار ورژن 5.4 لاراول, دیگه یک پکیج جداگانه محسوب میشه.
استفاده از PsySH خارج از لاراول
من به شدت توصیه میکنم که پکیج psysh رو بصورت گبوبال نصب کنید. شما میتونید با استفاده از دستور زیر اون رو نصب کنید :
composer global require psy/psysh:@stable
مطمئن بشید که /bin کامپوزر گلوبال در مسیر شما هست, پس میتونید psysh رو از هرجا اجرا کنید :
export PATH="~/.composer/vendor/bin:$PATH"
برای شروع کار باهاش دستور psysh رو وارد کنید, نتیجه ی زیر یک مثال از دستور داخلی show هست که میتونه به شما سورس کد یک دستور رو نشون بده :
$ psysh
Psy Shell v0.8.11 (PHP 7.1.5 — cli) by Justin Hileman
>>> show array_key_exists
function array_key_exists($key, $search)
Source code unavailable.
دستور help دوست شماست که شما میتونید قابلیت های داخلی psysh رو مشاهده کنید :
>>> help
help
ls
dump
doc
show
...
شما حتی میتونید مستندات هسته php رو دانلود کنید که بعنوان راهنما براتون عمل میکنه و هروقت بخواهید بدونید یک تابع چطور کار میکنه, به کمکتون میاد.
$ mkdir -p ~/.local/share/psysh/
$ wget -O \
~/.local/share/psysh/php_manual.sqlite
http://psysh.org/manual/en/php_manual.sqlite
با نصب PHP Manual, شما میتونید مستندات رو بخونید و سپس در CLI تست کنید :
$ psysh
Psy Shell v0.8.11 (PHP 7.1.5 — cli) by Justin Hileman
>>> doc array_key_exists
psysh
Psy Shell v0.8.11 (PHP 7.1.5 — cli) by Justin Hileman
>>> doc array_key_exists
function array_key_exists($key, $search)
Description:
Checks if the given key or index exists in the array
array_key_exists() returns TRUE if the given $key
is set in the array. $key can be any value
possible for an array index.
...
>>> array_key_exists('car', ['bike' => 'BMX']);
=> false
من همیشه از Psysh استفاده میکنم تا بدونم توابع داخلی PHP چطور کار میکنند و در یک محیط تعاملی با PHP بازی کنم. بجای استفاده از REPL من عادت داشتم یک فایل index.php بسازم و قابلیت های زبان رو داخلش تست کنم. اما راه بهتر اینه از Psysh استفاده بشه. دستور history یک خصوصیت برای REPL هست که شما میتونید دستورات قبلی رو فراخوانی کنید.
Laravel Tinker
همینطور که مطرح شد, Laravel Tinker از Psysh گرفته شده. Tinker یکی از بهترین راه ها برای تجربه ی اپلیکیشن لاراول شماست. بیایید به چند ویژگی عالی که میتونه فرآیند توسعه شما رو با لاراول بهبود ببخشه رو بررسی کنیم.
دستورات مستندات
دستور doc یک راه قدرتمند برای جستجو در مستندات درمورد یک تابع یا متد هست. برای مثال, بیایید بگوییم شما می خواهید درمورد کارایی کمکی ()request بدونید.
$ php artisan tinker
>>> doc request
function request($key = null, $default = null)
Description:
Get an instance of the current request or an input item from the request.
Param:
array|string $key
mixed $default
Return:
\Illuminate\Http\Request|string|array
یا شاید بخواهید کد ()request رو ببینید :
>>> show request
> 633| function request($key = null, $default = null)
634| {
635| if (is_null($key)) {
636| return app('request');
637| }
638|
639| if (is_array($key)) {
640| return app('request')->only($key);
641| }
642|
643| return data_get(app('request')->all(), $key, $default);
644| }
دستورات Artisan در Tinker
وقتی شما php artisan tinker رو اجرا کنید, دستور یک PsySH shell تعاملی با راه انداز لاراول اجرا میکنه. قبل از اجرای shell, دستور tinker دستوراتی رو به shell اضافه میکنه. این دستورات در پراپرتی commandWhitelist از کلاس TinkerCommand تعریف شدند :
protected $commandWhitelist = [
'clear-compiled',
'down',
'env',
'inspire',
'migrate',
'optimize',
'up',
];
از این لیست شما میتونید مشاهده کنید که چطور ممکنه حالت نگهداری (maintenance) روشن و خاموش میشه. همچنین میتونید migrate رو برای اعمال هر migration درحال انتظار, اجرا کنید. در آخر با اجرای دستور clear-compiled فایل کلاس کامپایل شده پاک میشه.
تست کد لاراول
یکی از مفیدترین قسمت های Tinker اینه که با کد لاراول بازی میکنه. شما میتونید از کنسول برای ساخت یک مدل استفاده کنید :
$ php artisan tinker
>>> use App\User;
>>> $user = new User([
'name' => 'John',
'email' => 'john@example.com'
]);
$user->password = bcrypt('example');
=> "$2y$10$2l1vIXYJy.Q5otmdaaNG5./l4jbxpYYlhrSipZAsJRwAuuzjsSXlq"
$user->save();
=> true
$user->toArray();
=> [
"name" => "John",
"email" => "john@example.com",
"updated_at" => "2017-09-12 06:37:13",
"created_at" => "2017-09-12 06:37:13",
"id" => 1,
]
این دستور مورد علاقه من درمورد استفاده از کمکی ()factory برای ساخت کاربران تستی هست :
$ php artisan tinker
>>> use App\User;
>>> factory(User::class, 5)->create();
...
میتونید کوئری دلخواه تون رو وارد کنید :
$php artisan tinker
>>> use App\User;
>>> User::limit(10)->get();
=> Illuminate\Database\Eloquent\Collection {#1071
all: [
App\User {#1072
id: 1,
publisher_id: null,
name: "John",
email: "john@example.com",
created_at: "2017-09-12 06:37:13",
updated_at: "2017-09-12 06:37:13",
},
],
}
>>>
این جای خوبی برای تجربه job های دستی و service ها و event ihsj :
$ php artisan tinker
>>> $log = app('log');
=> Illuminate\Log\Writer {#1042}
>>> $log->info('test');
=> null
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید