我正在尝试在新安装的Laravel中进行简单的课程.为此我创建了一个文件夹app/Convert并将php文件放在那里.这个类看起来像这样:
<?php
namespace App\Convert;
class Converter
{
public function __construct()
{
...Code
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我尝试从Tinker访问它时:
use App\Convert\Converter;
new Converter;
Run Code Online (Sandbox Code Playgroud)
我明白了:
PHP Fatal error: Class 'App/Convert/Converter' not found in Psy Shell code on line 1
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?据我所知,laravel应该自动执行app文件夹中的文件,它是子文件夹,还是我错了?
编辑:对不起,我第一次写错了(我只是玩了很多名称空间,所以我采取了错误的版本).问题实际上是文件名不是Converter.php,所以当我将它更改为Converter.php时,事情开始发生变化.如果将德文作为答案而不是评论,我会将德文的答案设置为正确的答案.所以写在这里:
包含类的文件的名称应与类名相同.并且文件的路径与命名空间路径相同.(见马修在他的回答下面的评论)
我正在做一些tinker关于 SO 的另一个问题。并且对于 Carbon 的 diffInHours 有一些奇怪的行为。未来时间的差异与过去时间的差异不同。这是我的修补程序命令和返回值:
>>> \Carbon\Carbon::now()->diffInHours(\Carbon\Carbon::now()->addHours(3))
=> 3
>>> \Carbon\Carbon::now()->addHours(3)->diffInHours(\Carbon\Carbon::now())
=> 2
>>> \Carbon\Carbon::now()->addHours(3)->diffInHours(\Carbon\Carbon::now())
=> 2
>>> \Carbon\Carbon::now()->addHours(3)->diffInHours(\Carbon\Carbon::now())
=> 2
>>> \Carbon\Carbon::now()
=> Carbon\Carbon @1595427497 {#4431
date: 2020-07-22 14:18:17.952594 UTC (+00:00),
}
Run Code Online (Sandbox Code Playgroud)
有没有人对导致这种行为的原因有任何见解?
我正在使用工厂模型类在修补程序上使用此命令插入一些虚拟数据:当我运行时
composer dump-autoload,
php artisan tinker,
Page::factory(10)->create()
Run Code Online (Sandbox Code Playgroud)
然后这个错误显示
PHP 错误:在/var/www/html/laravel/laravel8-blogeval()'d第 1 行代码中未找到“Page”类
我的模型文件位置app\Models\Page.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Page extends Model {
use HasFactory;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'title',
'slug',
'body',
'excerpt',
'image',
'thumb',
'view_count',
'user_id',
'meta_keywords',
'meta_description',
'social_image',
'order',
'published_at',
'is_active',
'is_destroy'
]; }
Run Code Online (Sandbox Code Playgroud)
我的工厂文件位置 database/factories/PageFactory.php
<?php
namespace Database\Factories;
use App\Models\Page;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
class PageFactory …Run Code Online (Sandbox Code Playgroud) 我有两个数据库连接。一个用于我的应用程序,另一个用于测试。在我的.. \ config \ database.php中
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'testing' => [
'driver' => 'mysql',
'host' => env('DB_TEST_HOST', 'localhost'),
'database' => env('DB_TEST_DATABASE', 'forge'),
'username' => env('DB_TEST_USERNAME', 'forge'),
'password' => env('DB_TEST_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方式更改播种中的数据库连接
php artisan db:seed …Run Code Online (Sandbox Code Playgroud) 首先,我使用下面的命令调用 artisantinker
$ php artisan tinker
Run Code Online (Sandbox Code Playgroud)
然后,我计划获取 Admin 中的所有模型,将名称更新为“admin”,然后使用下面的命令保存更新
$admin = App\Admin::get()->name="admin"->save()
//Admin is my model
//name is the table structure of Admin table
//then I save it with save()
Run Code Online (Sandbox Code Playgroud)
但是,它会弹出一个错误,如下所示:-
PHP 错误:在第 1 行的 Psy Shell 代码中的字符串上调用成员函数 save()
我想知道是否可以扩展或替换该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 …Run Code Online (Sandbox Code Playgroud) 当我尝试使用修补程序插入管理员数据时,我遇到了 php 错误问题。我正在创建一个多重身份验证用户,其中一个用于用户,一个用于管理员。
PHP 错误:在第 13 行的 c:/S/htdocs/iV/app/Models/Admin.php 中找不到类“Illuminate/Foundation/Auth/Admin”
我该如何解决该错误?
Admin
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\Admin as Authenticatable;
use Illuminate\Notifications\Notifiable;
use App\Notifications\AdminResetPasswordNotification;
class Admin extends Authenticatable
{
use HasFactory, Notifiable;
protected $guard = 'admin';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [ …Run Code Online (Sandbox Code Playgroud) 在以前的 Laravel 版本中,我在 tinker 中使用它:
php artisan tinker
factory(App\Banana::class, 3)->create();
Run Code Online (Sandbox Code Playgroud)
但是在 Laravel 8 中,它给出了这个错误:`PHP Error: Class 'Database/Factories/bananaFactory' not found
请如何使用 tinker 在 Laravel 8 中创建虚拟数据?谢谢你。
只需在字段名称前添加 # 前缀即可
我正在使用 Laravel Breeze,它默认将password和remember_token字段设置为隐藏。
class User extends Authenticatable
{
use HasFactory, Notifiable;
protected $fillable = [
'username',
'email',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我获取在 Tinker 中运行的 User 实例,User::inRandomerOrder()->first()我仍然能够看到这些假定的隐藏字段。
App\Models\User {#4440
id: 14,
username: "verdie10",
email: "jerrold.ziemann@example.org",
email_verified_at: "2021-08-31 11:19:47",
#password: "$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi",
#remember_token: "F87k6RPxgi",
created_at: "2021-08-31 11:19:47",
updated_at: "2021-08-31 11:19:47",
},
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Laravel Tinker创建一个具有构造函数作为接口的新对象.MyClass.php
class MyClass{
public function __construct(ApiInterface $APIloader)
{
$this->APIloader = $APIloader;
}
}
Run Code Online (Sandbox Code Playgroud)
ApiInterface.php
interface ApiInterface {
..
..
}
Run Code Online (Sandbox Code Playgroud)
我想在修补程序中测试我的类,所以我所做的是:
php artisan tinker>> $a = new App\MyClass(new App\ApiInterface);我得到的错误是:
PHP致命错误:在第1行的eval()代码中找不到类'App\ApiInterface'
修补匠不允许我todo,我觉得修补匠不认识一个接口作为一个类
任何的想法 ?
谢谢