Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 4,组前缀要求更改路由名称。真正地_Php_Laravel_Laravel 4 - Fatal编程技术网

Php Laravel 4,组前缀要求更改路由名称。真正地

Php Laravel 4,组前缀要求更改路由名称。真正地,php,laravel,laravel-4,Php,Laravel,Laravel 4,因此,我一直在开发一个应用程序,它位于域根上,现在必须在/admin上工作。所以像domain.com/[resource]这样的URL现在应该是domain.com/admin/[resource]。我以前并不认为这很好,因为我认为这必须是一个非常容易解决拉雷维尔。毕竟,这是不硬编码路线的主要原因之一,对吗 因此,我的routes.php文件类似于: Route::group(['before' => 'auth'], function() { Route::resource('

因此,我一直在开发一个应用程序,它位于域根上,现在必须在/admin上工作。所以像
domain.com/[resource]
这样的URL现在应该是
domain.com/admin/[resource]
。我以前并不认为这很好,因为我认为这必须是一个非常容易解决拉雷维尔。毕竟,这是不硬编码路线的主要原因之一,对吗

因此,我的routes.php文件类似于:

Route::group(['before' => 'auth'], function() {
    Route::resource('books', 'BooksController');
    ... more resources here ...
});
查看文档时,我发现
'prefix'=>'admin'
可以做到这一点:

Route::group(['prefix' => 'admin', 'before' => 'auth'], function() {
    Route::resource('books', 'BooksController');
    ... more resources here ...
});

但事实证明,每个路由名称都从
books.{action}
更改为
admin.books.{action}
,这需要我更改整个应用程序。Regexing将是危险的,手动执行将是令人讨厌的。拉威尔本该帮你的!还是我遗漏了什么?

这是未经测试的,但在查看文档后,似乎可以手动设置它们的名称。我假设Laravel会自动将名称空间分组到资源控制器路由,以避免名称冲突,但您可以覆盖该路由,以避免返回应用程序的其余部分(只是要小心将来的名称冲突):


较短的方法:

只需在
routes.php
文件的顶部定义一个快速方法,即可缩短创建路由名称数组的重复任务。仍然不是最好的解决方案,但我相信这是你能做的唯一一件事

function createRouteNames($resource) {
    $names = array();
    $types = ['index', 'create', 'store', 'show', 'edit', 'update', 'destroy'];
    foreach($types as $type) {
        $names[$type] = $resource . '.' . $type;
    }
    return $names;
}

Route::resource('books', 'BooksController', ['names' => createRouteNames('books')]);

注意:
[]==array()
并且在旧的PHP上可能不受支持,这意味着您可能需要用旧的语法替换它们。

这不是不合理的行为。它通过为路由命名空间,防止管理员“用户”资源与公共“用户”资源冲突。我同意应该有更多的控制权,但相反的行为是不好的。它确实有效。然而,这是一个相当丑陋的解决方案。它使我的routes.php文件大约大10倍@Mauro使用一个函数来查看我的更新,该函数为您的资源控制器创建这个名称数组。哈哈,我确实想到了这一点。但是我更喜欢long routes.php文件。这并不总是与文件的长度有关,而是与复杂性有关。我正在努力使文件易于阅读给其他人,包括一个函数将过于复杂。不过非常感谢你的方法。我会再等一会儿,然后再把你的答案记为正确答案。没问题,我同意你的观点。也许值得将它们拆分为一个目录,其中包含多个路由文件(针对每个组),所有这些文件都将包含在主
routes.php
?呸,我就这样不说了。我只是希望拉威尔能有一个更整洁的方式。比如用通配符命名整个资源的路由,比如
books.{action}
或其他。
function createRouteNames($resource) {
    $names = array();
    $types = ['index', 'create', 'store', 'show', 'edit', 'update', 'destroy'];
    foreach($types as $type) {
        $names[$type] = $resource . '.' . $type;
    }
    return $names;
}

Route::resource('books', 'BooksController', ['names' => createRouteNames('books')]);