我需要在Laravel中检查一些小东西,所以我只想编写一个小脚本来检查它。
我知道我可以做到
php artisan make:console ...
但是它将添加一个文件到App / Console / Command,并且我将需要更新app / Console / Kernel.php。这意味着我将把它提交到源代码管理中,这实际上是不需要的。
是否可以使用独立的 laravel脚本来访问Laravel组件?
我正在使用Laravel 5.2,(make:command不存在,只有make:console)
只是我尝试过的一个例子:
<?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
时,在可用命令列表中没有看到其签名。
答案 0 :(得分:1)
要解决您遇到的错误,请启动应用程序的内核并像这样处理响应
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
结果:
~/Sites/laravel (master ✗) ✹ ★ ᐅ php app/script.php
hello world
string(11) "Khalid Bins"
end!
答案 1 :(得分:0)
当我想在Laravel中尝试/测试某些东西时,我通常会做以下三件事之一:
如果我想尝试的“东西”是一种简单的单线纸,我可以使用Tinker:artisan tinker
。这为您提供了完全启动的Laravel框架,可以使用您想要的任何类或函数。通常,这是我要做的事情:测试刚刚创建的全局帮助器函数;使用工厂创建模型,以检查我的工厂设置是否正确;检查我在模型上的$ 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
启动光标处于打开状态的测试,以便在某些代码更改时可以快速重新运行它。
这意味着我可以让一些代码保留在其函数中,并编写一个新函数来详细说明我刚刚从新软件包中学到的知识。完成后,我可以保留代码并将其提交到存储库,以便以后可以在需要再次将其中一些代码用于生产代码时检查代码。如果看起来以后我不需要该代码了,我也可以丢弃测试文件。
最后一个解决方案还为我提供了额外的好处,那就是可以使用PHPUnit中的assert语句。
希望这可以使您对Laravel框架在尝试或测试新事物时的各种可能性有所了解。