Laravel 应用程序的结构(API、后台、前台)
Structure of Laravel App (API, Back office, Front office)
我的 Laravel 应用程序的结构需要帮助。
我要的基本就是这个结构:
- API
- 管理面板
- Public 网站
我开始构建我认为非常正确的文件夹结构:
app/
Http/Controllers/
API/
Back/
Front/
resources/
assets/
js/
back/
front/
sass/
back/
front/
views/
back/
front/
问题
Elixir:如何避免在 运行 gulp
之后将后端的库或资产包含在前端的代码中,反之亦然?
Views:如何在 Laravel 视图中使用命名空间?例如,在 views/front/
中给出 pages1
,这是 extending 一些 page2
。我希望 Blade 在编译时 自动 在 views/front
目录中搜索 page2
(而不是在 views/back
中)。
Routes: 如何将路由与 Controller 的命名空间进行匹配?我知道我们可以做到
Route::group(['domain' => 'example.com'], function() {});
还有
Route::group(['namespace' => 'Admin'], function() {});
但是如何组合它们呢?
对于Elixir,您可以使用Gulp
模块,然后根据需要使用mix
变量分离资产。在此示例中,gulp 会将 script.js
和 script2.js
合并到名为 public/backend/final.js
的最终文件中。
// backend assets
elixir(function(mix){
mix.scripts([
'js/back/script.js',
'js/back/script2.js',
], 'public/backend/final.js', 'resources/assets');
// here you can declare another group of assets using 'mix'
});
对于控制器命名空间,您编辑 app/Providers/RouteServiceProvider
文件并将每个命名空间声明为:
public function map(Router $router)
{
// backend namespace
$router->group(['namespace' => 'App\Http\Controllers\BackEnd'], function ($router) {
require app_path('Http/routes-backend.php');
});
// frontend namespace
$router->group(['namespace' => 'App\Http\Controllers\FrontEnd'], function ($router) {
require app_path('Http/routes-frontend.php');
});
// api namespace
$router->group(['namespace' => 'App\Http\Controllers\API'], function ($router) {
require app_path('Http/routes-api.php');
});
}
现在,创建三个文件:
- app/Http/routes-backend.php > 后端路由
- app/Http/routes-frontend.php > 前端路由
- app/Http/routes-api.php > API
的路线
例如,如果您需要声明一个新的后端控制器,请在 app/Http/routes-backend.php
:
处详细说明
Route::get('dashboard', 'DashboardController@show');
最后浏览量:
How to use namespaces in Laravel views ? For example, pages1 in views/front/ blade-extending page2 will automatically search page2 inside view/front directory.
那是不可能的,没有明确的引用就无法 page1
自动加载 page2
。使用 @extends
就足够了,我个人建议使用这种结构,因为您可以通过更多控制来跟踪您的视图。
我的 Laravel 应用程序的结构需要帮助。
我要的基本就是这个结构:
- API
- 管理面板
- Public 网站
我开始构建我认为非常正确的文件夹结构:
app/
Http/Controllers/
API/
Back/
Front/
resources/
assets/
js/
back/
front/
sass/
back/
front/
views/
back/
front/
问题
Elixir:如何避免在 运行 gulp
之后将后端的库或资产包含在前端的代码中,反之亦然?
Views:如何在 Laravel 视图中使用命名空间?例如,在 views/front/
中给出 pages1
,这是 extending 一些 page2
。我希望 Blade 在编译时 自动 在 views/front
目录中搜索 page2
(而不是在 views/back
中)。
Routes: 如何将路由与 Controller 的命名空间进行匹配?我知道我们可以做到
Route::group(['domain' => 'example.com'], function() {});
还有
Route::group(['namespace' => 'Admin'], function() {});
但是如何组合它们呢?
对于Elixir,您可以使用Gulp
模块,然后根据需要使用mix
变量分离资产。在此示例中,gulp 会将 script.js
和 script2.js
合并到名为 public/backend/final.js
的最终文件中。
// backend assets
elixir(function(mix){
mix.scripts([
'js/back/script.js',
'js/back/script2.js',
], 'public/backend/final.js', 'resources/assets');
// here you can declare another group of assets using 'mix'
});
对于控制器命名空间,您编辑 app/Providers/RouteServiceProvider
文件并将每个命名空间声明为:
public function map(Router $router)
{
// backend namespace
$router->group(['namespace' => 'App\Http\Controllers\BackEnd'], function ($router) {
require app_path('Http/routes-backend.php');
});
// frontend namespace
$router->group(['namespace' => 'App\Http\Controllers\FrontEnd'], function ($router) {
require app_path('Http/routes-frontend.php');
});
// api namespace
$router->group(['namespace' => 'App\Http\Controllers\API'], function ($router) {
require app_path('Http/routes-api.php');
});
}
现在,创建三个文件:
- app/Http/routes-backend.php > 后端路由
- app/Http/routes-frontend.php > 前端路由
- app/Http/routes-api.php > API 的路线
例如,如果您需要声明一个新的后端控制器,请在 app/Http/routes-backend.php
:
Route::get('dashboard', 'DashboardController@show');
最后浏览量:
How to use namespaces in Laravel views ? For example, pages1 in views/front/ blade-extending page2 will automatically search page2 inside view/front directory.
那是不可能的,没有明确的引用就无法 page1
自动加载 page2
。使用 @extends
就足够了,我个人建议使用这种结构,因为您可以通过更多控制来跟踪您的视图。