Overview:
I've Laravel project with a Laravel-Module a Laravel Package for Modularizing the project. The Laravel Project routes are working. However, In Laravel-Module action() and url() Helpers methods showing function doesn't exist while it exist.
Problem Statement:
Unable to direct to Laravel-Module Controller using action() and url() method
From AType_Controller.php
namespace Modules\Test\Http\Controllers;
class AType_Controller extends Controller
{
public function testFunc()
{
url(
action('\Modules\Test\Http\Controllers\BType_Controller@index'),
)
InvalidArgumentException Action Modules\Test\Http\Controllers\BType_Controller@index not defined.
Folder Structure:
project-root/
├─ app/
│ └─ Http/
│ └─ Controllers/
├─ bootstrap/
├─ config/
├─ database/
├─ Modules/
| └─ Test/
| └─ Config/
| └─ Console/
| └─ Database/
| └─ Entities/
| └─ Http/
| └─ Controllers/
| └─ AType_Controller.php
| └─ BType_Controller.php
| └─ Notifications/
| └─ Providers/
| └─ Resources/
| └─ Utils/
| └─ composer.json
| └─ module.json
| └─ package.json
├─ public/
│ └─ index.php
├─ resources/
├─ routes/
├─ storage/
├─ vendor/
├─ .env
└─ composer.json
composer.json
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"type": "project",
"require": {
"php": "^8.0.2",
"consoletvs/charts": "^7.2",
"laravel/framework": "^8.29",
"laravel/tinker": "^2.6",
"laravel/ui": "^3.2",
"nwidart/laravel-menus": "^7.0",
"nwidart/laravel-modules": "^8.2",
},
"autoload": {
"files": [
"app/Http/helpers.php"
],
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Modules\\": "Modules/"
}
},
Edit 1:
- I've publish the package configuration by running
php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"
And edited my
composer.jsonto addModulesinautoloadusingps-4.Run the
composer dump-autoloadcommand.
Edit 2:
$ php artisan tinker
Psy Shell v0.10.6 (PHP 8.0.2 — cli) by Justin Hileman
>>> (new Modules\Test\Entities\Document)->foo()
=> "foo"
Document.php
<?php
namespace Modules\Test\Entities;
use Illuminate\Database\Eloquent\Model;
class Document extends Model
{
public function foo()
{
return 'foo';
}
Edit 3:
$ php artisan module:v6:migrate
All modules have been migrated.
+---------------+---------+
| Module name | Status |
+---------------+---------+
| Essentials | Enabled |
| Manufacturing | Enabled |
| Superadmin | Enabled |
| Woocommerce | Enabled |
This command create modules_statuses.json under Laravel Project.
composer.jsonin question.