Laravel 4 Laravel扩展从composer安装的供应商类
您好,我正在使用以下软件包为应用程序中的每个环境添加不同的robots.txt文件。然而,这缺少了我在应用程序中使用的一种方法,即爬网延迟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
爬网延迟: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();
});
}
}
'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'
),