GVKun编程网logo

什么是运行Laravel的命令’php artisan serve’?(laravel运行原理)

23

本文将分享什么是运行Laravel的命令’phpartisanserve’?的详细内容,并且还将对laravel运行原理进行详尽解释,此外,我们还将为大家带来关于laravel-phpartisan命

本文将分享什么是运行Laravel的命令’php artisan serve’?的详细内容,并且还将对laravel运行原理进行详尽解释,此外,我们还将为大家带来关于laravel - php artisan 命令报错,无论输入什么命令、Laravel 4 Artisan 命令行实战、Laravel 4.1 – 使用Phpunit和Mockery测试Artisan命令、Laravel 5.1在运行’php artisan serve’时给出’undefined index:http_host’的相关知识,希望对你有所帮助。

本文目录一览:

什么是运行Laravel的命令’php artisan serve’?(laravel运行原理)

什么是运行Laravel的命令’php artisan serve’?(laravel运行原理)

我似乎不明白为什么我们需要运行一个带有PHP artisan服务的Laravel应用程序而不是用Apache或Nginx运行它.我知道在开发过程中,我们使用artisan来启动站点,在部署到服务器之后,您使用Web服务器来加载站点.

什么是首先在工匠中运行应用程序的用途?

解决方法:

serve命令只是PHP Built-in Webserver的一个快捷方式,PHP开箱即用,所以使用它的目的是尽可能快地开始测试你的应用程序,你只需要安装PHP,Composer和你的应用程序就可以了(当然,如果你不需要任何其他东西).但是如果你已经安装了Nginx,那就没有意义了,只需使用它即可.

在生产中使用Builtin Webserver是不明智的.

laravel - php artisan 命令报错,无论输入什么命令

laravel - php artisan 命令报错,无论输入什么命令

我按照https://segmentfault.com/a/1190000004598315一步一步做,但是 php arisan命令不能用了

laravel - php artisan 命令报错,无论输入什么命令

回复内容:

我按照https://segmentfault.com/a/1190000004598315一步一步做,但是 php arisan命令不能用了

laravel - php artisan 命令报错,无论输入什么命令

有以下几种情况:

立即学习“PHP免费学习笔记(深入)”;

  1. 你的服务提供者等框架运行前必加载的代码有问题,执行 optimize 时中断

  2. 使用composer update更新的包有问题

  3. composer update时各种情况更新中断, 依赖不完整

  4. composer update前没有运行 artisan clear-compield 导致旧的编译文件没有被清除

  5. optimize 会在 bootstrap/cache/ 文件夹下写入compiled.php 和 service.json 这类map文件,检查一下文件夹权限

不过看你这样子是用windows了,5可以忽略, 4可能性最高

推荐几组解决办法:

清理编译文件的方式

  • php artisan clear-compiled
    // 或者把上一句配置到 composer.json 中的 pre-update-cmd 以防后面又出现问题

  • composer update

使用无脚本的composer更新,并强制覆盖之前的编译内容

  • composer clearcache

  • composer update --no-scripts

  • php artisan optimize --force

暴力一点

如果还有问题, 就直接删掉vendor目录和composer.lock, 使用composer install --no-scripts重新安装,记得最后运行 php artisan optimize --force

执行:composer install 再试试

php artisan route:list
确定设置了 路由 ?

要学习基础的 推荐入门
http://laravel-china.org/

Laravel 4 Artisan 命令行实战

Laravel 4 Artisan 命令行实战

1. 命令行生成文件

以下命令会在 app/commands 文件夹中生成 TopicMakeExcerptCommand.php 文件

$ php artisan command:make TopicMakeExcerptCommand
Command created successfully.

2. 激活 Artisan 命令行

在 app/start/artisan.php 文件里面, 添加以下

Artisan::add(new TopicMakeExcerptCommand);

3. 加入业务逻辑代码

第一步生成的 TopicMakeExcerptCommand.php 文件, 修改以下区域

<?php
use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class TopicMakeExcerptCommand extends Command {

  /**
   * 1. 这里是命令行调用的名字, 如这里的: `topic:excerpt`, 
   * 命令行调用的时候就是 `php artisan topic:excerpt`
   *
   * @var string
   */
  protected $name = ''topic:excerpt'';

  /**
   * 2. 这里填写命令行的描述, 当执行 `php artisan` 时
   *   可以看得见.
   *
   * @var string
   */
  protected $description = ''这里修改为命令行的描述'';

  /**
   * Create a new command instance.
   *
   * @return void
   */
  public function __construct()
  {
    parent::__construct();
  }

  /**
   * 3. 这里是放要执行的代码, 如在我这个例子里面,
   *   生成摘要, 并保持.
   *
   * @return mixed
   */
  public function fire()
  {
        $topics = Topic::all();
        $transfer_count = 0;

        foreach ($topics as $topic) {
          if (empty($topic->excerpt))
          {
              $topic->excerpt = Topic::makeExcerpt($topic->body);
              $topic->save();
              $transfer_count++;
          }
        }
        $this->info("Transfer old data count: " . $transfer_count);
        $this->info("It''s Done, have a good day.");
  }}?>

4. 命令行调用

先查看下是否注册成功, 直接运行:

php artisan

开始执行命令

执行结果如下图:

$ php artisan topic:excerpt

Laravel 4.1 – 使用Phpunit和Mockery测试Artisan命令

Laravel 4.1 – 使用Phpunit和Mockery测试Artisan命令

我在Laravel 4.1中编写了我的第一个Artisan命令,想要了解如何测试它.我的命令做了一件事(现在).它基本上从DB中删除指定天数的表条目(Notes).

命令示例:

OneTimeNote:delete --days=25

该命令适用于飞行颜色.但是我先把这个命令写成了学习目的,现在我希望用它来测试.我正在使用PHPUnit和Mockery.

命令代码:
http://pastebin.com/index/dZrxpt8x

正如您所看到的,我正在注入我的Note实现(用于抽象),然后我执行其中一个方法’deleteNotesOlderThan(int $days)’.就像我说的,这一切都很好,花花公子.当我试图测试这个东西时,我的问题开始了.

指挥测试:http://pastebin.com/6UwxGvcN

如果你查看代码,你可以看到我被困在哪里.我如何模拟我的Note方法并生成命令测试?我应该用这个特定的命令测试什么样的东西?

先感谢您

解决方法:

我的建议是按照Laravel给你的例子.

从框架中挑选一个随机的工匠测试,看起来你不需要Symfony的’CommandTester’类,而只是你实例化并去.

从https://github.com/laravel/framework/blob/master/tests/Foundation/FoundationConfigPublishCommandTest.php :(链接主题变得陈旧)

public function testCommandCallsPublisherWithProperPackageName()
{
    $command = new Illuminate\Foundation\Console\ConfigPublishCommand($pub = m::mock('Illuminate\Foundation\ConfigPublisher'));
    $pub->shouldReceive('publishPackage')->once()->with('foo');
    $command->run(new Symfony\Component\Console\Input\ArrayInput(array('package' => 'foo')), new Symfony\Component\Console\Output\NullOutput);
}

因此,您实例化您的命令,传入您的模拟存储库界面,将您的期望添加到模拟,然后调用命令运行,传入’假’输入和输出类.

Laravel 5.1在运行’php artisan serve’时给出’undefined index:http_host’

Laravel 5.1在运行’php artisan serve’时给出’undefined index:http_host’

我使用5.4版学习了laravel 6个月.然后我安装了最新的xampp.但是现在我开始从事基于laravel 5.1的项目.但是,当我想运行该应用程序时,它给了我错误(未定义的索引:http_host)!我如何找到错误的来源?
我该如何解决这个问题?我在网上搜索,但没有发现任何成果.
你能帮我吗?
Storage / log.PHP:

[2017-07-18 21:55:50] local.ERROR: ErrorException: Undefined index: HTTP_HOST in H:\Current\school\school\app\Providers\AppServiceProvider.PHP:40

堆栈跟踪:

#0 H:\Current\school\school\app\Providers\AppServiceProvider.PHP(40): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined index...', 'H:\\Current\\scho...', 40, Array)
#1 [internal function]: Erp\Providers\AppServiceProvider->boot()
#2 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Container\Container.PHP(507): call_user_func_array(Array, Array)
#3 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Application.PHP(734): Illuminate\Container\Container->call(Array)
#4 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Application.PHP(717): Illuminate\Foundation\Application->bootProvider(Object(Erp\Providers\AppServiceProvider))
#5 [internal function]: Illuminate\Foundation\Application->Illuminate\Foundation\{closure}(Object(Erp\Providers\AppServiceProvider), 18)
#6 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Application.PHP(718): array_walk(Array, Object(Closure))
#7 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\BootProviders.PHP(17): Illuminate\Foundation\Application->boot()
#8 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Application.PHP(203): Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(Object(Illuminate\Foundation\Application))
#9 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.PHP(208): Illuminate\Foundation\Application->bootstrapWith(Array)
#10 H:\Current\school\school\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.PHP(105): Illuminate\Foundation\Console\Kernel->bootstrap()
#11 H:\Current\school\school\artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#12 {main}  

AppServiceProvider:

public function boot()

{

    if(!Session::get(SITE_ID)){
        $subdomain_name = array_shift((explode(".",$_SERVER['HTTP_HOST'])));
        if(isset($subdomain_name) && !empty($subdomain_name)){
            $domain = $subdomain_name;
        }else{
            $domain = "school";
        }
        $sitetoRecollect = DB::table('site_infos')->where('site_alias',$domain)->first();

        if(isset($sitetoRecollect->id) && !empty($sitetoRecollect->id) && $sitetoRecollect->id != 0){

            Session::put(SITE_ID,$sitetoRecollect->id);

        }else{

            Session::put(SITE_ID,1);

        }

    }

}

40线:

$subdomain_name = array_shift((explode(".",$_SERVER['HTTP_HOST'])));

解决方法:

变量$_SERVER [‘HTTP_HOST’]仅适用于浏览器,不适用于PHP-CLI,因此,当您运行命令PHP artisan $_SERVER [‘HTTP_HOST’]将不存在时,可以在此处进行检查Undefined index HTTP_HOST even though it is checked

在这种情况下,可以通过检查$_SERVER [‘HTTP_HOST’]是否存在来修复代码.

if(isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST'])){
    $gethost = explode(".",$_SERVER['HTTP_HOST']);
    $domain = array_shift($gethost);
}else{
    $domain = "school";
}

关于线路将解决您的问题,并且会有一些改进.这是固定代码的完整版本,并经过测试.

public function boot()
{
    if(!Session::get(SITE_ID)){
        $domain = "school";
        if(isset($_SERVER['HTTP_HOST']) && !empty($_SERVER['HTTP_HOST'])){
            $gethost = explode(".",$_SERVER['HTTP_HOST']);
            $domain = array_shift($gethost);
        }
        $sitetoRecollect = DB::table('site_infos')->where('site_alias', $domain)->first();
        if(isset($sitetoRecollect->id) != 0 && !empty($sitetoRecollect->id))
        {
            Session::put(SITE_ID, $sitetoRecollect->id);
        }else{
            Session::put(SITE_ID,1);
        }
    }
}

希望有帮助

今天关于什么是运行Laravel的命令’php artisan serve’?laravel运行原理的分享就到这里,希望大家有所收获,若想了解更多关于laravel - php artisan 命令报错,无论输入什么命令、Laravel 4 Artisan 命令行实战、Laravel 4.1 – 使用Phpunit和Mockery测试Artisan命令、Laravel 5.1在运行’php artisan serve’时给出’undefined index:http_host’等相关知识,可以在本站进行查询。

本文标签: