Laravelは初めてです。アプリを整理しておくために、コントローラーをコントローラーフォルダーのサブフォルダーに配置します。
controllers\
---- folder1
---- folder2
コントローラにルーティングしようとしましたが、laravelはそれを見つけません。
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
何が悪いのですか?
回答:
上記のLaravel 5.3の場合:
php artisan make:controller test/TestController
これが作成されますtest
が存在しない場合、その後作成し、フォルダをTestController
内部。
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";
}
}
次に、この方法でルートを登録できます。
Route::get('/test','test\TestController@getTest');
php artisan make:controller test\TestController
動作するのに対し、testTestController.phpを作成しますphp artisan make:controller 'test\TestController'
。(引用に注意)-Laravel 5.4
php artisan make:controller test/TestController
フォルダーにコントローラーを追加します。
controllers\
---- folder1
---- folder2
フォルダーを指定せずにルートを作成します。
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
走る
composer dump-autoload
そしてさらに試みる
artisan dump-autoload
すぎやでcomposer dump-autoload
十分?
ClassLoader::addDirectories
作曲家にないものがある場合は、職人も必要になります。
composer dump-autoload
私のためにも働きます。Windows OSを使用している場合は、.batファイルを使用して実行できます。composer dump-autoload
代わりに毎回CMDを入力。これは私が使用しているものです: PUSHD "E:\path\to\non-public" newline START /B "Window 1" composer dump-autoload newline pause
Laravel 5を使用している場合は、サブディレクトリ内のコントローラーの名前空間を設定する必要があります(Laravel 5はまだ開発中で、変更は毎日行われています)
次のようなフォルダ構造を取得するには:
Http
----Controllers
----Admin
PostsController.php
PostsController.php
次のような名前空間のAdmin \ PostsController.phpファイル:
<?php namespace App\Http\Controller\Admin;
use App\Http\Controllers\Controller;
class PostsController extends Controller {
//business logic here
}
次に、このためのルートは次のとおりです。
$router->get('/', 'Admin\PostsController@index');
そして最後に、作曲家または職人のダンプを取得するために取得しないでください
composer dump-autoload
または
php artisan dump
App\Http\Controllers\Auth\Controller
は見つかりませんでしたと言います、なぜController
そこに単語を追加し、コントローラの実際の名前を失うのですか?スラッシュがそうしていると思います。 -o
助けにはならなかった。
** Laravel 5またはLaravel 5.1 LTSの両方**で、管理フォルダーに複数のコントローラーがある場合Route::group
は、非常に役立ちます。例えば:
更新:Laravel 5.4で動作します
私のフォルダ構造:
Http
----Controllers
----Api
----V1
PostsApiController.php
CommentsApiController.php
PostsController.php
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 {
...
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']);
});
1.次のようにサブフォルダーを作成します:
app
----controllers
--------admin
--------home
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');
}
);
?>
3. sthをapp / controllers / admin / IndexController.phpに記述します。例:
<?php
namespace Admin;
class IndexController extends \BaseController {
public function index()
{
return "admin.home";
}
}
?>
4.サイトにアクセスします。例:localhost / admin / testページに「admin.home」が表示されます
PS:私の貧しい英語を無視してください
ちょうどそれを行う方法を見つけました:
/app/start/global.phpへのパスを追加するだけです
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/controllers/product',
app_path().'/models',
app_path().'/database/seeds',
));
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"
]
},
次に私は走った
composer dump-autoload
その後
php artisan dump-autoload
次に、routes.phpに次のようにコントローラーを含めます。
Route::controller('admin', 'AdminController');
そして、すべてが正常に動作します。
1)これで、アプリを整理できます。
すべてのルートファイル(web.php
、api.php
...)は、map()
メソッド内、ファイル内で宣言されます
\app\Providers\RouteServiceProvider.php
ルートファイルをマッピングすると、そのファイルにを設定できます->namespace($this->namespace)
。例の中でそこに表示されます。
つまり、より多くのファイルを作成してプロジェクトをより構造化することができます!
そして、それぞれに異なる名前空間を設定します。
しかし、私empty string
は名前空間の設定を好みます""
2)ネイティブphpの方法でルーティングするようにコントローラーを設定できます。例を参照してください。
Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
IDEでコントローラー名をダブルクリックすると、すばやく簡単にアクセスできます。
Laravel 5.3以降を使用している場合は、他の回答で述べられているようにそれほど複雑にする必要はありません。デフォルトのartisanコマンドを使用して、新しいコントローラーを生成するだけです。たとえばUser
、User
フォルダにコントローラを作成したい場合などです。入力します
php artisan make:controller User/User
ルートでは、
Route::get('/dashboard', 'User\User@dashboard');
これを実行するだけで問題ありません。localhost/ dashboardには、ページが存在します。
お役に立てれば。
AdminとFrontのコントローラーを別々のフォルダーに保存すると、名前空間がうまく機能すると思います。
以下のLaravelディレクトリ構造を見てください。
app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.php
「routes / web.php」ファイルのルートは次のようになります
/* All the Front-end controllers routes will work under Front namespace */
Route::group(['namespace' => 'Front'], function () {
Route::get('/home', 'HomeController@index');
});
そして、管理セクションでは、次のようになります
/* All the admin routes will go under Admin namespace */
/* All the admin routes will required authentication,
so an middleware auth also applied in admin namespace */
Route::group(['namespace' => 'Admin'], function () {
Route::group(['middleware' => ['auth']], function() {
Route::get('/', ['as' => 'home', 'uses' => 'DashboardController@index']);
});
});
お役に立てれば!!