将Laravel升级到4.2后,Artisan :: call('migrate')无效

时间:2014-06-14 19:05:32

标签: php symfony laravel laravel-4

我在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"
}

4 个答案:

答案 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无效。