آموزش کار با Laravel Tinker
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 4 دقیقه

آموزش کار با Laravel Tinker

لاراول شامل یک 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

منبع

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
4.67 از 3 رای

/@arastoo
ارسطو عباسی
کارشناس تولید و بهینه‌سازی محتوا

کارشناس ارشد تولید و بهینه‌سازی محتوا و تکنیکال رایتینگ - https://arastoo.net

دیدگاه و پرسش

برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید