1
abelyao 2014-07-22 14:37:42 +08:00
最近也看上 laravel 了,关注一下。
|
2
cooper 2014-07-22 14:51:02 +08:00
当然可以。
|
3
floy OP |
4
cooper 2014-07-22 14:59:43 +08:00
@floy
你这不是命名空间啊。 推荐命名空间、如果不使用命名空间的话、只要命名不重复就行了。 也就是说 ProfileController 在 app/controllers 下面只能有一个。目录层级没关系。 |
5
bearcat001 2014-07-22 15:10:21 +08:00
https://getcomposer.org/doc/04-schema.md#classmap
这里有composer的文档,laravel的controller是用classmap来映射的。 classmap映射是不限定目录格式的,所以在这里可以随便分目录结构,命名空间可以随便设定,没有强制要求。 member那个位置是命名空间,除非你设定了命名空间,否则不需要 |
6
floy OP |
7
floy OP @bearcat001
如果真是这样,那就省心多了,我去测试 下,非常感谢! |
8
kukat 2014-07-22 16:05:29 +08:00
|
9
Yuansir 2014-07-22 16:37:27 +08:00
用命名空间就可以了
甚至你可以新建一个目录,在下面建controller,model子目录都可以,相当于module一样的 按照psr-0的规范,只要在 composer.json 里面配置 "autoload": { "psr-0": { "XXX": "app/myapp" } }, |
10
trimleo 2014-07-22 16:41:41 +08:00
建议用命名空间即可 大型一点的应用可以考虑用repository 业务上可以试试command bus
|
11
floy OP @Yuansir
这种方式我更喜欢了,要去composer.json里配置?配置完了以后呢,那还需要再install一次吗,能自动生成烦恼app下的目录吗 在ThinkPHP中,生成一个新的module,直接bind一个appname就可以把核心目录给build,比较方便 |
13
qichunren 2014-07-22 18:28:08 +08:00
我发现用了命名空间以后,要在控制器中头部namespace下面写一堆use Xxx,烦死啦。有什么解决办法?
|
14
mx1700 2014-07-22 21:56:12 +08:00
直接创建目录就行了,然后在 composer.json 的 autoload.classmap 节点把你创建的目录加进去
类似这样: "autoload": { "classmap": [ "app/commands", "app/controllers", "app/controllers/Api", |
15
floy OP 我现在是这么做的:
在composer.json中配置 "autoload": { "classmap": [ "app/commands", "app/controllers", "app/controllers/admin", "app/controllers/member", "app/controllers/group", ............ 然后 composer dump-autoload 在app/controllers/member下添加class文件,添加命名空间 namespace App\Controllers\Member; 路由上更改配置如下 //用户 Route::group(array('prefix' => 'member', 'namespace' => 'App\Controllers\Member'), function() { Route::get('/', 'IndexController@index'); ........ }); 现在好了,能正常访问到控制器了,但出现了新问题,DB方法等无法使用,报class not found |
16
mx1700 2014-07-23 10:27:57 +08:00
|
17
kisay 2014-09-12 10:02:46 +08:00
只需要在start/global.php 的 classloader 中添加对应的路径就可以了
ClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/controllers/apis', app_path().'/models', app_path().'/database/seeds', )); |