我想在控制器中運行沒有shell命令的composer dump-autoload
。
在laravel 4我使用Artisan::call('dump-autoload');
但在laravel 5這個命令不起作用。從laravel 5中的控制器運行composer dump-autoload
回答
工匠沒有包裝器composer
。作曲家本身帶來composer
命令來控制自己。
目前還沒有方法來調用在適當方式composer
命令,從工匠 - 甚至沒有與php artisan make:console CommandName
創建自己的工匠命令。
除非您不希望使用PHP exec
或system
,我強烈建議您不要這樣做,您最好單獨運行composer dump-autoload
。
有沒有辦法用你自己的命令做到這一點,而不使用'exec'或'system',檢查我的答案。 –
中有> = Laravel 5.0沒有Artisan::call('dump-autoload');
命令,但如果你仍然想使用此命令,不想exec
或system
使用的解決方案,你需要創建自己的命令:php artisan make:console DumpAutoload
(您需要添加新的命令到$commands
數組app/Console/Kernel.php
)。然後,你需要注入作曲類給你新的命令結構:
public function __construct(Composer $composer)
{
parent::__construct();
$this->composer = $composer;
}
,然後你可以在handle()
方法運行dumpAutoloads()
:
public function handle()
{
$this->composer->dumpAutoloads();
}
檢查類MigrateMakeCommand
在vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateMakeCommand.php
有使用它的一個示例命令。在這裏你有我的命令:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Foundation\Composer;
class DumpAutoload extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'dump-autoload';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Regenerate framework autoload files';
/**
* The Composer instance.
*
* @var \Illuminate\Foundation\Composer
*/
protected $composer;
/**
* Create a new command instance.
*
* @param Composer $composer
* @return void
*/
public function __construct(Composer $composer)
{
parent::__construct();
$this->composer = $composer;
}
/**
* Execute the console command.
*
* @return void
*/
public function handle()
{
$this->composer->dumpAutoloads();
$this->composer->dumpOptimized();
}
}
對於使用laravel 5.5和更高版本的人。更改使用以使用Illuminate \ Support \ Composer; –
- 1. Laravel 5從Artisan命令運行控制器方法
- 2. Laravel 5控制器返回控制器
- 3. Laravel 5資源控制器
- 4. Laravel 5主頁控制器
- 5. Laravel 5驗證控制器
- 6. laravel 5中的加載控制器
- 7. 運行控制器方法每5秒
- 8. 使用Composer和Laravel安裝Laravel Collection 5
- 9. 從控制器Laravel
- 10. 如何從JavaScript發送參數到laravel 5中的控制器?
- 11. Laravel 5 - 路由控制器錯誤
- 12. 添加控制器到Laravel 5包
- 13. Laravel 5單路多控制器方法
- 14. Laravel 5動態控制器路由
- 15. CSV導出laravel 5控制器
- 16. Laravel - 在一個控制器中運行另一個控制器的方法
- 17. 從控制器的Symfony3控制檯運行控制檯命令
- 18. 如何設置laravel 5分頁,傳遞數組從控制器
- 19. Laravel 5將變量從控制器傳遞到查看
- 20. Laravel 5將數據從控制器傳遞到命令
- 21. 試圖從控制器傳遞數據以查看laravel 5
- 22. Laravel 5:從控制器傳遞多個陣列到視圖
- 23. 如何使用從模型中收到的laravel 5控制器中的數據?
- 24. laravel中的控制器
- 25. Laravel控制器
- 26. Laravel 5資源控制器中的自定義命名路由
- 27. Laravel 5在AngularJS控制器中雄辯的模型對象
- 28. Laravel 5 - 處理控制器中的不同數據
- 29. 如何訪問Laravel 5中的管理控制器?
- 30. Laravel 5中的控制器命名約定
你試過'Artisan :: call('composer dump-autoload');'?如果你需要一個_real_ artisan命令,你需要讓自己習慣於編寫命令(https://laravel.com/docs/master/artisan#writing-commands) – codedge
命令「composer dump-autoload」沒有被定義。 – paranoid
我在想這可能會發生。你可以用'exec'或'system'使用本地php,或者更好地使用正確的工匠命令..正如Laravel官方文檔中所述。 請記住,主機系統上大多禁止「exec」和「system」。 – codedge