我在Laravel控制器方法中使用 Artisan :: call(' migrate'); ,并且在Laravel版本为4.1时使用它。在使用 composer update 命令更新Laravel之后(并在composer.js中设置" laravel / framework":" 4.2。*" 这个控制器方法(因为这是它中唯一的命令)不再起作用了。
我甚至添加了' cipher' =>在http://laravel.com/docs/upgrade#upgrade-4.2
中所述的/app/config/app.php中的MCRYPT_RIJNDAEL_256已经发生:http://laravel.io/forum/06-02-2014-not-able-run-artisan-commands
当我将Artisan :: call(' migrate')放入try / catch块控制器时,如下所示:
public function ArtMigr(){
try {
Artisan::call('migrate');
} catch (Exception $e) {
echo $e;
}
}
我收到以下错误:
例外' ErrorException'使用消息'使用未定义的常量 STDIN - 假设' STDIN''在 d:\ htdocs中\ artisan_error \厂商\ symfony的\控制台\的Symfony \元器件\控制台\助手\ QuestionHelper.php:112 堆栈跟踪:#0 d:\ htdocs中\ artisan_error \厂商\ symfony的\控制台\的Symfony \元器件\控制台\助手\ QuestionHelper.php(112): Illuminate \ Exception \ Handler-> handleError(8,'使用undefine ...', ' D:\ htdocs \ artis ...',112,Array)#1 d:\ htdocs中\ artisan_error \厂商\ symfony的\控制台\的Symfony \元器件\控制台\助手\ QuestionHelper.php(49): 的Symfony \组件\控制台\助手\ QuestionHelper-> doAsk(对象(Symfony的\元器件\控制台\输出\ NullOutput), 对象(Symfony \ Component \ Console \ Question \ ConfirmationQuestion))#2 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\控制台\ Command.php(186): 的Symfony \组件\控制台\助手\ QuestionHelper->询问(对象(Symfony的\元器件\控制台\输入\ ArrayInput), 对象(Symfony的\元器件\控制台\输出\ NullOutput), 对象(Symfony \ Component \ Console \ Question \ ConfirmationQuestion))#3 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\控制台\ ConfirmableTrait.php(21): 照亮\控制台\命令 - >确认('你真的......')#4 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\数据库\控制台\迁移\ MigrateCommand.php(59): 照亮\数据库\控制台\迁移\ MigrateCommand-> confirmToProceed()
5 D:\ htdocs \ artisan_error \ vendor \ laravel \ framework \ src \ Illuminate \ Console \ Command.php(112):
Illuminate \ Database \ Console \ Migrations \ MigrateCommand-> fire()#6 d:\ htdocs中\ artisan_error \厂商\ symfony的\控制台\的Symfony \元器件\控制台\命令\ Command.php(252): 照亮\控制台\命令 - >执行(对象(Symfony的\元器件\控制台\输入\ ArrayInput), 对象(Symfony \ Component \ Console \ Output \ NullOutput))#7 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\控制台\ Command.php(100): 的Symfony \组件\控制台\命令\命令 - >运行(对象(Symfony的\元器件\控制台\输入\ ArrayInput), 对象(Symfony \ Component \ Console \ Output \ NullOutput))#8 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\控制台\ Application.php(96): 照亮\控制台\命令 - >运行(对象(Symfony的\元器件\控制台\输入\ ArrayInput), 对象(Symfony \ Component \ Console \ Output \ NullOutput))#9 [内部 功能]:照亮\控制台\应用程序 - >呼叫('迁移')#10 d:\ htdocs中\ artisan_error \供应商\ laravel \框架的\ src \照亮\基金会\ Artisan.php(57): call_user_func_array(Array,Array)#11 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\支持\外墙\ Facade.php(208): Illuminate \ Foundation \ Artisan-> __ call(' call',Array)#12 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\支持\外墙\ Facade.php(208): Illuminate \ Foundation \ Artisan->电话(' migrate')#13 d:\ htdocs中\ artisan_error \应用\控制器\ HomeController.php(160): Illuminate \ Support \ Facades \ Facade :: __ callStatic(' call',Array)#14 d:\ htdocs中\ artisan_error \应用\控制器\ HomeController.php(160): Illuminate \ Support \ Facades \ Artisan :: call(' migrate')#15 d:\ htdocs中\ artisan_error \应用\控制器\ HomeController.php(145): HomeController-> InstallDatabaseStructure()#16 d:\ htdocs中\ artisan_error \应用\控制器\ HomeController.php(127): HomeController-> WriteDatabaseCredentials('本地主机&#39 ;, ' laravel-aplikac ...',' root','')#17 [内部功能]: HomeController-> postTestDatabaseConnection()#18 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\路由\ Controller.php这样(231): call_user_func_array(Array,Array)#19 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\路由\ ControllerDispatcher.php(93): Illuminate \ Routing \ Controller-> callAction(' postTestDatabas ...',Array)
20 D:\ htdocs \ artisan_error \ vendor \ laravel \ framework \ src \ Illuminate \ Routing \ ControllerDispatcher.php(62):
照亮\路由\ ControllerDispatcher->呼叫(对象(HomeController中), 对象(Illuminate \ Routing \ Route),' postTestDatabas ...')#21 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\路由\ Router.php(930): 照亮\路由\ ControllerDispatcher->调度(对象(照亮\路由\路线), 对象(Illuminate \ Http \ Request),' HomeController', ' postTestDatabas ...')#22 [内部功能]: Illuminate \ Routing \ Router-> Illuminate \ Routing {closure}()#23 D:\ htdocs \ artisan_error \ vendor \ laravel \ framework \ src \ Illuminate \ Routing \ Route.php(105):call_user_func_array(Object(Closure),Array)#24 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\路由\ Router.php(996): Illuminate \ Routing \ Route-> run(Object(Illuminate \ Http \ Request))#25 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\路由\ Router.php(964): 照亮\路由\路由器 - > dispatchToRoute(对象(照亮\ HTTP \请求))
26 D:\ htdocs \ artisan_error \ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Application.php(738):
照亮\路由\路由器 - >调度(对象(照亮\ HTTP \请求))
27 D:\ htdocs \ artisan_error \ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Application.php(708):
照亮\基金会\应用 - >调度(对象(照亮\ HTTP \请求))
28 D:\ htdocs \ artisan_error \ vendor \ laravel \ framework \ src \ Illuminate \ Session \ Middleware.php(72):
照亮\基金会\应用 - >手柄(对象(照亮\ HTTP \请求), 1,真实)#29 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\曲奇\ Queue.php(47): 照亮\会话\ Middleware->手柄(对象(照亮\ HTTP \请求), 1,真实)#30 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\曲奇\ Guard.php(51): Illuminate \ Cookie \ Queue-> handle(Object(Illuminate \ Http \ Request),1, 真的)#31 d:\ htdocs中\ artisan_error \厂商\堆\助洗剂\ SRC \堆栈\ StackedHttpKernel.php(23): Illuminate \ Cookie \ Guard-> handle(Object(Illuminate \ Http \ Request),1, 真的)#32 d:\ htdocs中\ artisan_error \厂商\ laravel \框架\ SRC \照亮\基金会\ Application.php(606): Stack \ StackedHttpKernel-> handle(Object(Illuminate \ Http \ Request))#33 d:\ htdocs中\ artisan_error \公共\的index.php(49): Illuminate \ Foundation \ Application-> run()#34 {main}
一切都在我这边做得好吗?
composer.js包含:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
"laravel/framework": "4.2.*",
"way/generators": "dev-master"
},
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
"config": {
"preferred-install": "dist"
},
"minimum-stability": "stable"
}
答案 0 :(得分:20)
是的,上一版本实际上存在问题,以前的所有来源都不起作用,应该使用:
Artisan::call('migrate', array('--force' => true));
经过测试并正常工作。
答案 1 :(得分:2)
Use of undefined constant STDIN
似乎是一个Symfony错误,请参阅github.com/symfony/symfony/issues/10795。
composer update
可以解决您的问题。
答案 2 :(得分:1)
我认为您必须在通话中添加'-n'=>true
因为你正在制作并且“你确定问题被解雇了”
所以它就像
Artisan::call('migrate',array('-n'=>true));
答案 3 :(得分:1)
有关此主题的一些信息,适用于遇到此问题的任何人:
之所以会这样,是因为生产环境中的migrate
命令会要求您进行确认。但是,在Web请求的上下文中这是不可能的,因此命令失败。要阻止其要求确认,请使用--force
标志。
错误Use of undefined constant STDIN - assumed 'STDIN
基本上是symfony,它告诉您它没有可用于查询用户输入的标准输入。如果您不在终端中运行命令,则这是预期的行为。当前版本的symfony/console
(撰写本文时为5.0。*)仍然存在此行为。
还请注意,在这种情况下,尝试按照http://github.com/symfony/symfony/issues/10795中的建议手动定义STDIN无效。