Мне было интересно, можно ли расширить или заменить команду php artisan tinker
, чтобы она сначала запрашивала аутентификацию как способ привратника, который может ее использовать.
Я пробовал следующее:
<?php
namespace App\Console\Commands;
use Laravel\Tinker\Console\TinkerCommand;
use Illuminate\Support\Facades\Auth;
class Tinker extends TinkerCommand
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'tinker';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$email = $this->ask('Login (email)');
$password = $this->secret('Password for '.$email);
if (!Auth::attempt(compact('email', 'password'))) {
$this->error('Invalid Credentials.');
return;
}
if (Auth::user()->cannot('use-tinker')) {
$this->error('Unauthorized.');
return;
}
parent::handle();
}
}
Но я получаю сообщение об ошибке, потому что я не включил параметр «включить», используемый TinkerCommand@handle
public function handle()
{
$this->getApplication()->setCatchExceptions(false);
$config = new Configuration([
'updateCheck' => 'never',
]);
$config->getPresenter()->addCasters(
$this->getCasters()
);
$shell = new Shell($config);
$shell->addCommands($this->getCommands());
$shell->setIncludes($this->argument('include')); # <-------- include argument
if (isset($_ENV['COMPOSER_VENDOR_DIR'])) {
$path = $_ENV['COMPOSER_VENDOR_DIR'];
} else {
$path = $this->getLaravel()->basePath().DIRECTORY_SEPARATOR.'vendor';
}
$path .= '/composer/autoload_classmap.php';
$loader = ClassAliasAutoloader::register($shell, $path);
try {
$shell->run();
} finally {
$loader->unregister();
}
}
Я не уверен, что такое аргумент включения. Я попытался сбросить его, и это пустой массив. На данный момент мне интересно, есть ли лучший способ.