用"QuizzesInit"名称制作自定义插件我有问题,我想是因为双名称插件。我的插件位于/projects_path/quizzes/packages/vendorname/QuizzesInit/src/Providers/QuizzesInitProvider.php文件中,其内容如下:
<?php
// My phpstorm shows error here : Namespace name doesn't match the PSR-0/PSR-4 project structure
namespace vendorname\QuizzesInit\Providers;
use Illuminate\Support\ServiceProvider;
class QuizzesInitProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
$this->loadRoutesFrom(__DIR__.'/../routes/web.php');
$this->loadViewsFrom(__DIR__ . '/views', 'QuizzesInit' );
}
public function register()
{
}
}
正在添加路由到/projects_path/quizzes/packages/供应商名称/quizzesInit/src/routes/web.php:
Route::get('/quizzes', function () {
//packages/vendorname/QuizzesInit/src/views/index.blade.php
return view('QuizzesInit::index');
}); // ->middleware(['auth', 'verified'])->name('dashboard');
我在URL "www.example.com"上遇到错误http://local-site.com/quizzes"
View [index] not found.
我不知道这个错误是否与"QuizzesInit"名称和命名空间名称破坏了我在提供程序中显示的PSR-0/PSR-4项目结构有关?
在所有文档(如https://laravel.com/docs/9.x/packages#service-providers)中,使用1个单词的插件名称...
怎么才能修好呢?
- 更新信息#1:**在docs www.example.com上,不清楚实际需要运行哪些编写器命令https://laravel.com/docs/9.x/packages#service-providers that is not clear actually which composer commands I need to run
1.我跑
composer 初始化
在清除vendorname/QuizzesInit目录中并创建新的合成器项目
1.我在项目根目录下运行:
组合器转储自动装入
成功了,但它没有显示我的包裹
1.当我运行composer require时,我的包在项目根目录中:
$composer需要供应商名称\QuizzesInit
在PackageDiscoveryTrait.php的第364行中:
找不到软件包vendornameQuizzesInit的匹配版本。请检查软件包的拼写、版本约束以及软件包的稳定性是否与最低稳定性(dev)匹配。
1.在composer.json中,我有:
"自动加载":{" psr-4 ":{"应用程序":" app/","数据库\工厂":"数据库/工厂/","供应商名称\QuizzesInit ":"软件包/供应商名称/QuizzesInit/src/","数据库\种子":"数据库/种子/"}},
5)在我的/packages/供应商名称/QuizzesInit/src中,我有一些文件:
-rwxrwxrwx 1 root root 585 Feb 14 08:47 composer.json
-rwxrwxrwx 1 root root 95971 Feb 14 07:34 composer.lock
drwxrwxrwx 1 root root 0 Feb 14 07:35 Providers
drwxrwxrwx 1 root root 0 Feb 14 08:53 routes
drwxrwxrwx 1 root root 0 Feb 14 07:34 src
drwxrwxrwx 1 root root 4096 Feb 14 07:34 vendor
drwxrwxrwx 1 root root 0 Feb 15 06:39 views
但是我现在不确定我运行了哪个命令,我在根目录和/packages/vendorname/QuizzesInit中运行了不同的命令...我在net中找到了一些分步指南(如https://adevait.com/laravel/how-to-create-a-custom-package-for-laravel),但这对我来说有些困惑,哪些命令我必须在第一次和开发包期间运行?
- 更新信息#2:**
在packages/vendorname/QuizzesInit/src/routes/web.php中,我添加了:
Route::get('/quizzes_count', function () {
return 'quizzes_count';
});
所以运行http://local-com.com/quizzes_count我得到了有效的'quizzes_count'字符串在我的浏览,所以我认为我的插件安装正确,并在提供程序文件packages/vendorname/QuizzesInit/src/Providers/QuizzesInitProvider.php有2个选项:
public function boot()
{
$this->loadRoutesFrom(__DIR__.'/../routes/web.php');
// routes with line above works ok
// view with line below does not work at all
$this->loadViewsFrom(__DIR__ . '/views', 'QuizzesInit' );
}
?
- 更新信息#3:**
# Project/packages/vendorname/QuizzesInit/src/views$ ls -la
total 8
drwxrwxrwx 1 root root 0 Feb 15 06:39 .
drwxrwxrwx 1 root root 4096 Feb 15 06:39 ..
-rwxrwxrwx 1 root root 643 Feb 15 06:40 index.blade.php
- 更新信息#4:**我写
__DIR__ . '/views'
值登录并具有:
Project/packages/vendorname/QuizzesInit/src/Providers/views
但它与真实路径不同:
Project/packages/vendorname/QuizzesInit/src/views/index.blade.php
从"Providers/"的哪里?或者我必须在我的选项中添加这个" Providers/"子目录?在哪里?
谢谢!
1条答案
按热度按时间4bbkushb1#
在你提供了所有的信息之后,这是很有意义的。
$this->loadViewsFrom(__DIR__ . '/views', 'QuizzesInit' );
位于如果您查找文档中关于
__DIR__
的说明,* 返回文件的目录.*,这一切都是有意义的。您的
QuizzesInitProvider.php
位于packages/vendorname/QuizzesInit/src/Providers
中,因此__DIR__
将返回给您。但是,您要查找的是
Views
目录,它不在/Providers
目录下,而是在/Providers
目录的上一级。因此,为了到达Views
目录,您必须执行与路由完全相同的操作(真不敢相信我们俩都没早点发现),因此$this->loadViewsFrom(__DIR__ . '/views', 'QuizzesInit' );
现在将变为$this->loadViewsFrom(__DIR__.'/../views', 'QuizzesInit' );
,点表示您要从当前目录(/Providers
)上移一个目录,然后移动到/views
目录。变更:
$this->loadViewsFrom(__DIR__ . '/views', 'QuizzesInit' );
至:
$this->loadViewsFrom(__DIR__.'/../views', 'QuizzesInit' );