How To Use Laravel Package In My Own Package?
I'm developing a Role-Permission package in Laravel and I want to use this package;
Problem is I can not use some functions in the main project when I install this package in my own package. example "HasRoles"
My packages composer.json file
"require": {
"spatie/laravel-permission": "dev-master"
},
"autoload": {
"psr-4": {
"Modul\\Permission\\": "src"
}
},
"extra": {
"laravel": {
"providers": [
"Spatie\\Permission\\PermissionServiceProvider"
]
}
}
main project composer file
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.8.*",
"laravel/tinker": "^1.0"
},
"require-dev": {
"beyondcode/laravel-dump-server": "^1.0",
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"phpunit/phpunit": "^7.5"
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": {
"psr-4": {
"App\\": "app/",
"Modul\\Permission\\": "packages/modul/permission/src"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
"minimum-stability": "dev",
"prefer-stable": true,
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
}
}
and my User model;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use Notifiable;
use HasRoles;
when I serve its show this error message...
Symfony \ Component \ Debug \ Exception \ FatalErrorException (E_UNKNOWN) Trait 'Spatie\Permission\Traits\HasRoles' not found
What am I doing wrong here?
Answer
The problem is you are just autoloading your packages files into your project. This way your project's composer doesn't know anything about your package's dependencies (hence why spatie/permission
package is not being installed).
The correct way to do this is to require your package into your project. Usually you would create a repository for your project, register it at https://packagist.org as modul/permission
and then run composer require modul/permission
for you project.
But if your package is still not fully developed, I would recommend you require it not from packagist, but from the so-called path repository
. Inside your project's composer.json
add the following section:
{
...
"repositories": [
{
"type": "path",
"url": "packages/modul/permission"
},
]
...
}
This will make composer look into your packages/modul/permission
directory for your package when you require it. So do this and remove manual autoload of your package's source files from your project's composer.json
(composer will use your package's autoload section to bind /src
to Module\Permission
namespace):
"psr-4": {
"App\\": "app/",
"Modul\\Permission\\": "packages/modul/permission/src" <--- remove this line
}
Lastly, run composer require modul/permission
. Composer will find it inside the path repository we specified for him and symlink the packages/modul/permission
directory to vendor/modul/permission
and install it's dependencies as well.
Now you can edit your package inside packages/modul/permission
folder. Once it's done be sure to publish it online on github/packagist, so that it can be remotely available from packagist repository to everyone, not just from your local path one.
Related Questions
- → "failed to open stream" error when executing "migrate:make"
- → October CMS Plugin Routes.php not registering
- → OctoberCMS Migrate Table
- → OctoberCMS Rain User plugin not working or redirecting
- → October CMS Custom Mail Layout
- → October CMS - How to correctly route
- → October CMS create a multi select Form field
- → October CMS - Conditionally Load a Different Page
- → How to disable assets combining on development in OctoberCMS
- → October CMS - Radio Button Ajax Click Twice in a Row Causes Content to disappear
- → OctoberCms component: How to display all ID(items) instead of sorting only one ID?
- → In OctoberCMS how do you find the hint path?
- → How to register middlewares in OctoberCMS plugin?