Tin*_*ino 76 laravel laravel-4 laravel-routing
我是Laravel的新手.为了尝试保持我的应用程序井井有条,我想将我的控制器放入控制器文件夹的子文件夹中.
controllers\
---- folder1
---- folder2
Run Code Online (Sandbox Code Playgroud)
我试图路由到控制器,但laravel找不到它.
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Ja2*_*a22 82
对于Laravel 5.3以上
php artisan make:controller test/TestController
Run Code Online (Sandbox Code Playgroud)
这将创建测试文件夹,如果它不存在,然后创建test内部.
TestController 将如下所示:
<?php
namespace App\Http\Controllers\test;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function getTest()
{
return "Yes";
}
}
Run Code Online (Sandbox Code Playgroud)
在路线中
Route::get('/test','test\TestController@getTest');
Run Code Online (Sandbox Code Playgroud)
Ant*_*iro 69
在文件夹中添加控制器:
controllers\
---- folder1
---- folder2
Run Code Online (Sandbox Code Playgroud)
创建不指定文件夹的路线:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
Run Code Online (Sandbox Code Playgroud)
跑
composer dump-autoload
Run Code Online (Sandbox Code Playgroud)
然后再试一次
小智 48
对于使用Laravel 5的用户,您需要在子目录中设置控制器的命名空间(Laravel 5仍在开发中,并且每天都在进行更改)
要获得如下文件夹结构:
Http
----Controllers
----Admin
PostsController.php
PostsController.php
Run Code Online (Sandbox Code Playgroud)
命名空间Admin\PostsController.php文件如下:
<?php namespace App\Http\Controller\Admin;
use App\Http\Controllers\Controller;
class PostsController extends Controller {
//business logic here
}
Run Code Online (Sandbox Code Playgroud)
那你的路线是:
$router->get('/', 'Admin\PostsController@index');
Run Code Online (Sandbox Code Playgroud)
最后,不要为了做作曲家或工匠转储
composer dump-autoload
Run Code Online (Sandbox Code Playgroud)
要么
php artisan dump
Run Code Online (Sandbox Code Playgroud)
小智 9
1.创建您的子文件夹,如下所示:
app
----controllers
--------admin
--------home
Run Code Online (Sandbox Code Playgroud)
2.在app/routes.php中配置你的代码
<?php
// index
Route::get('/', 'Home\HomeController@index');
// admin/test
Route::group(
array('prefix' => 'admin'),
function() {
Route::get('test', 'Admin\IndexController@index');
}
);
?>
Run Code Online (Sandbox Code Playgroud)
3.写在app/controllers/admin/IndexController.php中,例如:
<?php
namespace Admin;
class IndexController extends \BaseController {
public function index()
{
return "admin.home";
}
}
?>
Run Code Online (Sandbox Code Playgroud)
4.访问您的网站,例如:localhost/admin/test您将在页面上看到"admin.home"
ps:请忽略我可怜的英语
对于**Laravel 5或Laravel 5.1 LTS**,如果你在Admin文件夹中有多个控制器,Route::group对你真的很有帮助.例如:
更新:适用于Laravel 5.4
我的文件夹结构:
Http
----Controllers
----Api
----V1
PostsApiController.php
CommentsApiController.php
PostsController.php
Run Code Online (Sandbox Code Playgroud)
PostAPIController:
<?php namespace App\Http\Controllers\Api\V1;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PostApiController extends Controller {
...
Run Code Online (Sandbox Code Playgroud)
在My Route.php中,我将namespace组设置为Api\V1整体,它看起来像:
Route::group(
[
'namespace' => 'Api\V1',
'prefix' => 'v1',
], function(){
Route::get('posts', ['uses'=>'PostsApiController@index']);
Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']);
});
Run Code Online (Sandbox Code Playgroud)
有关移动详细信息以创建子文件夹,请访问此链接.
在 Laravel 5.6 中,假设您的子文件夹的名称是Api:
在您的控制器中,您需要这两行:
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
Run Code Online (Sandbox Code Playgroud)
在您的路线文件中api.php,您需要:
Route::resource('/myapi', 'Api\MyController');
Run Code Online (Sandbox Code Playgroud)
刚刚找到了一种方法:
只需添加/app/start/global.php的路径即可
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/controllers/product',
app_path().'/models',
app_path().'/database/seeds',
));
Run Code Online (Sandbox Code Playgroud)
php artisan make:controller admin/CategoryController
Run Code Online (Sandbox Code Playgroud)
这里的admin是app/Http/Controllers下的子目录,CategoryController是你想在目录中创建的控制器
我正在使用Laravel 4.2.我在这里是怎么做的:
我有一个像这样的目录结构:
app
--controllers
---- admin
------ AdminController.php
在我创建了控制器之后,我在composer.json中放入了新管理目录的路径:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/admin",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
Run Code Online (Sandbox Code Playgroud)
接下来我跑了
composer dump-autoload
Run Code Online (Sandbox Code Playgroud)
然后
php artisan dump-autoload
Run Code Online (Sandbox Code Playgroud)
然后在routes.php我有这样的控制器包括:
Route::controller('admin', 'AdminController');
Run Code Online (Sandbox Code Playgroud)
一切正常.
如果您使用 Laravel 5.3 或更高版本,则无需像其他答案所说的那样陷入如此复杂的情况。只需使用默认的 artisan 命令即可生成新的控制器。例如,如果我想User在文件夹中创建一个控制器User。我会输入
php artisan make:controller User/User
Run Code Online (Sandbox Code Playgroud)
在航线上,
Route::get('/dashboard', 'User\User@dashboard');
Run Code Online (Sandbox Code Playgroud)
这样做就可以了,现在 localhost/dashboard 就是页面所在的位置。
希望这可以帮助。
1) 这就是你如何组织你的应用程序:
每个路由文件 ( web.php, api.php...) 都在一个map()方法中声明,在一个文件中
\app\Providers\RouteServiceProvider.php
Run Code Online (Sandbox Code Playgroud)
当你映射一个路由文件时,你可以->namespace($this->namespace)为它设置一个,你会在示例中看到它。
这意味着您可以创建更多文件,使您的项目更有条理!
并为每一个设置不同的命名空间。
但我更喜欢empty string为命名空间设置""
2)您可以将控制器设置为以原生 php 方式路由,请参见示例:
Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
Run Code Online (Sandbox Code Playgroud)
现在,您可以在 IDE 中双击控制器名称以快速方便地到达那里。