Lumen 路由简洁之路?!

我是从 laravel4-sae 转过来的。

lumen 的路由由于替换成了 nikic/FastRoute
laravel 有稍稍的不同 ~

整理下我的新得,路过的给下建议 ~~ 高手就别鄙视了。。

  1. lumen 基于 laravel5 是十分注重命名空间的
    将 route 绑定到 controller 需要写类的全名 ~

    php    // 错误的写法
        $app->get('/', [
            'as' => 'index',
            'uses' => 'MainController@index'
        ]);
    
        // 正确的写法
        $app->get('/', [
            'as' => 'index',
            'uses' => 'App\Http\Controllers\MainController@index'
        ]);
    

    这里给大家一个 小小的 tip ~
    如果大家的 Controller 都在 app/Http/Controllers 这个目录的话,
    可以通过 Route Groups 来简写

    php    $app->group(['namespace' => 'App\Http\Controllers'], function($app) {
            $app->get('/', [
                'as' => 'index',
                'uses' => 'MainController@index'
            ]);
    
            $app->get('admin', [
                'as' => 'admin',
                'uses' => 'AdminController@index'
            ]);
        });
    
  2. 也许有人跟我一样需要定义中文路径,例如:xxx.com/你好 xxx.com/中国
    这在 laravel 里是支持的也没什么问题,但是 lumen 换成了 nikic/FastRoute
    而且衔接部分没做完善 ~~ 所以自己动手丰衣足食!

    php    // vendor/laravel/lumen-framework/src/Application.php#1347
        public function getPathInfo()
        {
            $query = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
    
            return '/'.ltrim(str_replace('?'.$query, '', $_SERVER['REQUEST_URI']), '/');
        }
    
        // 修改后
        public function getPathInfo()
        {
            $query = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '';
    
            $path = '/'.ltrim(str_replace('?'.$query, '', $_SERVER['REQUEST_URI']), '/');
    
            return rawurldecode($path);
        }
    

    已经将这个改动提交了 https://github.com/laravel/lumen-framework/pull/114
    希望能被早日合并到官方主分支 ^__^

嗯。 暂时就这么多了 ~~

阅读 13k
5 个回答

亲爱的,这是问答栏目。

为什么我不写命名空间也是可以得??

@zonghua
因为现在的版本,默认已经指向controller的命名空间了

$router->get('foo', function () {
    return 'Hello World';
});

$router->post('foo', function () {
    //
});

来源:http://lumen.pintuan-xcx.cn

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进