在以前的版本中,您可以使用 artisan 命令
php artisan app:name NewName
Run Code Online (Sandbox Code Playgroud)
使用更改应用程序命名空间(默认为 App)。工匠命令现在似乎消失了。不再支持更改命名空间吗?
我是 Laravel 的新手。我正在开发 laravel 版本 6。我已经创建了迁移。它第一次运行得很好,但是如果我更改迁移文件中的某些内容然后运行php artisan migrate
它会显示nothing to migrate
. 我php artisan migrate --path
也尝试过,但它不起作用。为了使其工作,我必须删除迁移文件并重新创建它。我不想用php artisan migrate:fresh
。
我应该怎么做才能只运行一个已更改的迁移文件?
有人可以解释 ResourceCollection 和 JsonResource 之间的区别吗?
在 Laravel 6 文档中,您可以生成 2 种不同类型的资源……ResourceCollection 和 JsonResource。 https://laravel.com/docs/6.x/eloquent-resources#resource-responses
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\ResourceCollection;
class ShopCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
}
Run Code Online (Sandbox Code Playgroud)
对...
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class Shop extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function …
Run Code Online (Sandbox Code Playgroud) 我已将我的网站从 Laravel 5.8 迁移到 Laravel 6,在Composer 更新后,我在网站上出现此错误,并且仅使用命令php artisan:
PHP Fatal error: Uncaught RuntimeException: A facade root has not been set. in /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:242
Stack trace:
#0 /var/www/html/app/Exceptions/Handler.php(48): Illuminate\Support\Facades\Facade::__callStatic('check', Array)
#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(376): App\Exceptions\Handler->report(Object(Symfony\Component\Debug\Exception\FatalThrowableError))
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(141): Illuminate\Foundation\Console\Kernel->reportException(Object(Symfony\Component\Debug\Exception\FatalThrowableError))
#3 /var/www/html/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 {main}
thrown in /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 242
Fatal error: Uncaught RuntimeException: A facade root has not been set. in /var/www/html/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:242
Stack trace:
#0 /var/www/html/app/Exceptions/Handler.php(48): Illuminate\Support\Facades\Facade::__callStatic('check', Array)
#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(376): App\Exceptions\Handler->report(Object(Symfony\Component\Debug\Exception\FatalThrowableError))
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(141): Illuminate\Foundation\Console\Kernel->reportException(Object(Symfony\Component\Debug\Exception\FatalThrowableError))
#3 /var/www/html/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#4 …
Run Code Online (Sandbox Code Playgroud) 缓存前缀设置具有默认值:
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache')
Run Code Online (Sandbox Code Playgroud)
但是当我缓存一些数据(使用 Redis)时,缓存键具有意外的格式:
app_database_app_cache:some-data
Run Code Online (Sandbox Code Playgroud)
缓存键以数据库前缀为前缀。我期望缓存键是:
app_cache:some-data
Run Code Online (Sandbox Code Playgroud)
这是正确的行为吗?是否可以在某处进行更改?
我正在编写一些单元测试来测试数据库事务中间件,出现异常时事务中的所有内容都应该回滚。这段代码工作得很好并且通过了单元测试:
成功的单元测试方法
public function testTransactionShouldRollback()
{
Event::fake();
// Ignore the exception so the test itself can continue.
$this->expectException('Exception');
$this->middleware->handle($this->request, function () {
throw new Exception('Transaction should fail');
});
Event::assertDispatched(TransactionRolledBack::class);
}
Run Code Online (Sandbox Code Playgroud)
然而,每当我测试一个TransactionBeginning
事件时,它都无法断言该事件已被调度。
失败的单元测试方法
public function testTransactionShouldBegin()
{
Event::fake();
$this->middleware->handle($this->request, function () {
return $this->response;
});
Event::assertDispatched(TransactionBeginning::class);
}
Run Code Online (Sandbox Code Playgroud)
实际的中间件
public function handle($request, Closure $next)
{
DB::beginTransaction();
try {
$response = $next($request);
if ($response->exception) {
throw $response->exception;
}
} catch (Throwable $e) {
DB::rollBack();
throw $e;
}
if (!$response->exception) {
DB::commit(); …
Run Code Online (Sandbox Code Playgroud) index()
我尝试测试控制器的方法。在这个方法中,有一个模型。
class UserController extends Controller
{
public function index()
{
return User::all();
}
}
Run Code Online (Sandbox Code Playgroud)
在测试课上,我有以下内容。
class UserControllerTest extends TestCase
{
public function testIndex():void
{
$user = factory(User::class)->make();
$mock = Mockery::mock(User::class);
$mock->shouldReceive('all')->andReturn($user);
$this->app->instance('User', $mock);
$response = $this->json('GET', 'api/users');
dd($response->getContent()); // error : [2002] Connection refused
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,与数据库的连接出现错误。这很奇怪,因为我模拟了该模型,这意味着我不需要建立与数据库的连接。我该如何解决这个错误?
错误
SQLSTATE[HY000] [2002] 连接被拒绝(SQL:select * from
users
whereusers
.deleted_at
为空)
我在测试 Laravel 项目的浏览器中收到此错误:
\nIlluminate\\Database\\QueryException\nSQLSTATE[HY000] [1698] Access denied for user \'root\'@\'localhost\'\n(SQL: select count(*) as aggregate from `users` where `email` = test@test.com)\n
Run Code Online (Sandbox Code Playgroud)\n我在 Stack Overflow 和其他网站上发现了类似的问题,但给出的所有解决方案都不适合我。
\n另一个类似的错误代码是关于 MySQL 的,但我的是关于 Laravel 的。不是MySQL。
\n我使用Ubuntu 18.04 (Bionic Beaver)、Laravel 6、LAMP,我的数据库是 MySQL,服务器由 Apache 2.4 提供服务,而不是 Homebrew 或 PHP localhost。
----------(测试项目上下文)
\n我正在遵循教程,并成功添加了“登录”和“注册”按钮。现在,当我尝试注册新用户时,我遇到了两个权限问题,我可以用 解决sudo chmod
这些问题,但我已经在第三个问题上停留了五个小时。如果今天还没有解决问题,我将重新安装所有内容。
根据我的理解,PHP ARTISAN UI:AUTH
需要处理所有代码,您只需要PHP ARTISAN MIGRATE
在创建我已经完成的授权 UI 之后即可。MIGRATE
我实际上可以在 MYSQL 终端中看到数据库中创建的表。
----------(/测试项目上下文)
\n我尝试过的解决方案:
\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1 or 127.0.0.11 or localhost\nDB_PORT=3306 …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Laravel 项目版本 5.8。
我使用了两个中间件Admin
和Author
.
我已经创建了AdminMiddleware
和AuthorMiddlware
。
我都在Kernel.php
. 我改变了RedirectIfAuthenticated
,loginController
用于自定义重定向。我创建了不同的路线组。
对于管理中间件,它将重定向admin.dashboard
,对于作者中间件,它将重定向到author.dashboard
.
之后,它会重定向到/home
默认 Laravel 登录用户的路由。我想在登录后将管理员重定向到 admin.dashboard,将作者重定向到author.dashboard。自定义重定向不起作用。我多次查看了我的项目,但找不到问题。
登录控制器.php
// protected $redirectTo = '/home';
public function __construct(){
if(Auth::check() && Auth::user()->role->id==1) {
return redirect()->route('author.dashboard');
} else if (Auth::check() && Auth::user()->role->id==2) {
return redirect()->route('admin.dashboard');
}else {
$this->middleware('guest')->except('logout');
}
}
Run Code Online (Sandbox Code Playgroud)
RedirectIfAuthenticated.php
public function handle($request, Closure $next, $guard = null){
if (Auth::guard($guard)->check() && Auth::user()->role->id==1) {
return redirect()->route('author.dashboard'); …
Run Code Online (Sandbox Code Playgroud) 我有一个搜索模块,其中:当用户停止输入时,它应该搜索 name。
我认为解决方案是做一个timeout
when a user keyup
. 参考
<input type="text" @keyup="textSearch($event)">
textSearch(e){
var timer;
clearTimeout(timer);
timer = setTimeout(() => {
alert('searching...');
}, 2500);
}
Run Code Online (Sandbox Code Playgroud)
代码全部正常工作,问题是为什么当我在 1 秒内输入 3 个字符时,它会弹出 3 个警报?我预计应该会弹出一个窗口,因为它会等待 2.5 秒。
代码有问题吗?需要帮助先生们
laravel-6 ×10
laravel ×8
php ×5
phpunit ×2
composer-php ×1
eloquent ×1
laravel-5 ×1
laravel-5.8 ×1
mocking ×1
mysql ×1
namespaces ×1
php-7.2 ×1
ubuntu-18.04 ×1
vue.js ×1
vuejs2 ×1