【问题标题】:Laravel 5 Extending core classLaravel 5 扩展核心类
【发布时间】:2015-12-03 20:07:24
【问题描述】:

我正在尝试扩展 Laravel 5 核心类。我想要实现的是我可以拥有自定义 url 生成器,例如。 URL::test(),会生成自定义链接。

到目前为止我有:

  1. 已创建 app/Acme/lib 文件夹
  2. 为 composer.json 类映射添加了 app/Acme/lib 路径

    "autoload": {
        "classmap": [
            ....
            app/Acme/lib
         ]
    }
    
  3. 在 Acme/lib/CustomUrlGenerator.php 中创建自定义 UrlGenerator 类

    <?php namespace App\Acme\lib;
    use \Illuminate\Routing\UrlGenerator;
    class CustomUrlGenerator extends UrlGenerator {
        public function test() {
           return $this->to('/test');
        }
    }
    
  4. 创建服务提供者app/Acme/lib/CustomUrlServiceProvider.php

    <?php namespace App\Acme\lib;
    use \Illuminate\Routing\RoutingServiceProvider;
    class CustomUrlServiceProvider extends RoutingServiceProvider {
        public function boot() {
            App::bind('url', function() {
                return new CustomUrlGenerator(
                    App::make('router')->getRoutes(),
                    App::make('request')
                );
            });
            parent::boot();
        }
    }
    
  5. 注册服务商在app/config/app.php

  6. 运行 composer dump-autoload

现在当我运行 {!! URL::test() !!},我为每条路线得到 404

Sorry, the page you are looking for could not be found.
NotFoundHttpException in /vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php line 143:

我有什么遗漏吗? 非常感谢您的帮助..

【问题讨论】:

    标签: php class laravel extend


    【解决方案1】:

    您在RouteCollection.php 文件中提到了一个错误,但您没有将它包含在您的问题中。此外,我会在composer.json 中写不同的内容,如下所示:

    "autoload": {
    "classmap": [
            // ....
            "App\\Your_Namespace\\" : "app/Acme/lib",
        ]
    }
    

    【讨论】:

    • 是的,我已经根据这个答案stackoverflow.com/a/20520861/4437438 修复了那个(非常感谢)+ 修复了自定义服务提供商,现在它可以正常工作了
    • 很高兴有帮助
    猜你喜欢
    • 1970-01-01
    • 2013-07-01
    • 2023-03-12
    • 1970-01-01
    • 2013-08-14
    • 2012-09-26
    • 2013-12-29
    • 2015-07-06
    • 1970-01-01
    相关资源
    最近更新 更多