php Laravel小独立的一次性脚本没有工匠命令?

raogr8fs  于 2023-03-11  发布在  PHP
关注(0)|答案(2)|浏览(130)

我需要在Laravel检查一些小的东西,所以我只想做一个小脚本来检查它。
我知道我能做到

php artisan make:console ...

但是它会在App/Console/Command中添加一个文件,我需要更新app/Console/Kernel.php。这意味着我必须将其提交给源代码管理,这真的不需要。
是否有一种方法可以拥有一个独立laravel脚本,使我能够访问Laravel组件?
我正在使用Laravel 5.2,(make:命令不存在,只有make:控制台)
举个例子来说明我的尝试:

<?php

use App\User;
use DB;

require __DIR__.'/../vendor/autoload.php';
require __DIR__.'/..//bootstrap/app.php';

echo "hello world\n";
$res=User::where('id',5)->first();
echo "end!\n";
?>

但我得到一个错误:

PHP Fatal error:  Uncaught Error: Call to a member function connection() on null in /var/www/html/dpriceit/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:3314
Stack trace:
#0 /var/www/html/dpriceit/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(3280): Illuminate\Database\Eloquent\Model::resolveConnection(NULL)
#1 /var/www/html/dpriceit/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1880): Illuminate\Database\Eloquent\Model->getConnection()
#2 /var/www/html/dpriceit/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1853): Illuminate\Database\Eloquent\Model->newBaseQueryBuilder()
#3 /var/www/html/dpriceit/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(1823): Illuminate\Database\Eloquent\Model->newQueryWithoutScopes()
#4 /var/www/html/dpriceit/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php(3524): Illuminate\Database\Eloquent\Model->newQuery()

更新

我尝试创建控制台命令

php artisan make:console MyTempTest

但是当我执行php artisan list时,在可用命令列表中看不到它的签名。

kq0g1dla

kq0g1dla1#

要修复您遇到的错误,请 Boot 应用程序的内核并如下处理响应
app\script.php

<?php

use App\User;

require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

echo "hello world\n";
$res = User::find(5)->name;
var_dump($res);
echo "end!\n";

然后从终端运行php app/script.php
结果:

$ php app/script.php 
hello world
string(11) "John Doe"
end!
2skhul33

2skhul332#

当我想在Laravel中尝试/测试某样东西时,我通常会做以下三件事之一:
如果我想尝试的“某事”是一个简单的一行程序,我会使用Tinker:artisan tinker。这给你一个完全启动的Laravel框架,准备好使用任何你想要的类或函数。这通常是我想做的事情:测试我刚刚创建的一个全局helper函数;使用工厂创建模型,以检查我的工厂是否设置正确;检查模型上的$casts数组是否设置正确;
另一种情况可能需要更多的代码,可能需要几行代码来从数据库中检索一些数据,将其修改并显示在页面上。为此,您只需在文件routes/web.php中创建一个基于闭包的路径:

Route::get('test-url', function () {
    $user = User::where('email', 'user@example.com')->first();

    $user->makeAdmin()->save();

    // I can see on the page if the attributes have been changed, as a result of the makeAdmin() call.
    return $user->getAttributes();
});

对于控制台路由也是如此。在routes/console.php文件中添加如下结构:

Artisan::command('test:functionality', function () {
    $instance = new BusinessLogic();

    $result = $instance->someVeryInterestingMethod();

    dump($result);
});

然后,您可以使用php artisan test:functionality从命令行调用此函数。当然,您可以随意调用此命令。
那么最后一个场景;当我想尝试新事物时(如新包、库插件),它将超过几行代码。我用php artisan make:test ThrowawayTest创建了一个新的测试类(或其他随机选择的名称)。然后,我可以添加几行代码,并使用PHPUnit运行它。我已经设置了编辑器,以使用组合键CTRL-T启动光标所在的测试,以便可以重新当某些代码更改时快速运行它。
这意味着我可以让一些代码留在它的函数中,并编写一个新函数来详细说明我刚刚了解到的关于新包的事情。当我完成时,我可以留下代码并将其提交到存储库中,这样我就可以在以后需要将其中的一些再次用于生产代码时检查代码。如果看起来我不想再使用测试文件,我也可以丢弃它。I don“以后我不需要这些代码作为参考。
最后一个解决方案还为我提供了额外的好处,即能够使用PHPUnit中的assert语句。
希望这能让您对Laravel框架在尝试或测试新东西时的不同可能性有一些了解。

相关问题