Laravel 4 Laravel扩展从composer安装的供应商类

Laravel 4 Laravel扩展从composer安装的供应商类,laravel-4,extend,Laravel 4,Extend,您好,我正在使用以下软件包为应用程序中的每个环境添加不同的robots.txt文件。然而,这缺少了我在应用程序中使用的一种方法,即爬网延迟 爬网延迟:3600 现在,我从该软件包的composer安装中获得了以下文件夹: vendor/healy/robots/src/healey/robots/robots.php,其开头如下: <?php namespace Healey\Robots; class Robots {....} 现在将抛出以下错误: 不应静态调用非静态方法AppRo

您好,我正在使用以下软件包为应用程序中的每个环境添加不同的robots.txt文件。然而,这缺少了我在应用程序中使用的一种方法,即爬网延迟

爬网延迟:3600

现在,我从该软件包的composer安装中获得了以下文件夹:

vendor/healy/robots/src/healey/robots/robots.php,其开头如下:

<?php namespace Healey\Robots;

class Robots
{....}
现在将抛出以下错误:

不应静态调用非静态方法AppRobots::crawlDelay()

因此,我将方法更改为静态,如下所示:

public static function crawlDelay($delay)
{
    $this->addLine("Crawl-delay: $delay");
}
但是,这会引发以下错误:

在不在对象上下文中时使用$this,因此我更新了它以使用以下方法:

/**
 * Add crawl Delay to robots.txt.
 *
 * @param string $delay
 */
public static function crawlDelay($delay)
{
    $robots = new \Robots();
    $robots->addLine("Crawl-delay: $delay");
}
现在我得到了对未定义方法Healey\Robots\RobotsFacade::addLine()的调用

这是RobotsFacade文件(vendor/healy/robots/src/healy/robots/RobotsFacade.php)

在别名数组中,我有以下内容:

Route::get('robots.txt', function() {
    // If on the live server, serve a nice, welcoming robots.txt.
    if (App::environment() == 'production')
    {
        \Robots::addUserAgent('*');
        \AppRobots::crawlDelay('3600');

    } else {
        // If you're on any other server, tell everyone to go away.
        \Robots::addDisallow('*');
    }
    return Response::make(Robots::generate(), 200, array('Content-Type' => 'text/plain'));
});
    'Healey\Robots\RobotsServiceProvider',
    'MyApp\Healey\Robots\CustomRobotsServiceProvider'
     'Robots'         => 'Healey\Robots\Robots',
但是,这不是使用此方法添加爬网延迟线:

        \Robots::crawlDelay('3600');

你知道为什么这一行没有写入robots.txt路径吗?它很好地实现了方法,但没有成功地添加此行。

您需要创建自己的服务提供商,并覆盖其中的“robots”服务,以便它使用您的类,而不是基本类

  • 创建服务提供商

    use Illuminate\Support\ServiceProvider;
    class CustomRobotsServiceProvider extends ServiceProvider
    {
      public function boot()
      {
      }
    
      public function register()
      {
        $this->app['robots'] = $this->app->share(function($app)
        {
            return new AppRobots();
        });
      }
    }
    
  • 在config/app.php中注册服务提供商

    'providers' => array(
       ... some other providers
       'Your\Namespace\CustomRobotsServiceProvider'
    ),
    

  • 确保您的服务提供商在RobotsServiceProvider之后注册,以便您的服务覆盖原始服务,而不是相反。

    谢谢您的帮助。但是我现在得到了对未定义方法MyApp\Healey\Robots\AppRobots::addUserAgent()的调用的错误
    。我已经用我的代码更新了我的问题。您的AppRobots类需要扩展原始的Robots类。谢谢,我刚刚意识到并更新了问题。它并没有将其写入文件,当我点击应用程序url时,我只得到了这个
    用户代理:
    ,但我也期望
    爬网延迟:3600
    行。首先,通过facade Robots访问所有方法并删除类的别名。更改它,并让我知道它是否仍然存在。我已经完成了,并且没有返回错误,但是新方法没有附加到robots.txt路由。你知道为什么吗??
        'Healey\Robots\RobotsServiceProvider',
        'MyApp\Healey\Robots\CustomRobotsServiceProvider'
    
         'Robots'         => 'Healey\Robots\Robots',
    
            \Robots::crawlDelay('3600');
    
    use Illuminate\Support\ServiceProvider;
    class CustomRobotsServiceProvider extends ServiceProvider
    {
      public function boot()
      {
      }
    
      public function register()
      {
        $this->app['robots'] = $this->app->share(function($app)
        {
            return new AppRobots();
        });
      }
    }
    
    'providers' => array(
       ... some other providers
       'Your\Namespace\CustomRobotsServiceProvider'
    ),