Ich bin neu in Laravel. Um meine App in Ordnung zu halten, möchte ich meine Controller in Unterordnern des Controller-Ordners ablegen.
controllers\
---- folder1
---- folder2
Ich habe versucht, zu einem Controller zu routen, aber Laravel findet ihn nicht.
Route::get('/product/dashboard', '[email protected]');
Was mache ich falsch?
für Laravel 5.3 oben
php artisan make:controller test/TestController
Wenn dies nicht der Fall ist, wird ein Testordner erstellt. Anschließend wird TestController
darin erstellt.
TestController
sieht so aus:
<?php
namespace App\Http\Controllers\test;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function getTest()
{
return "Yes";
}
}
?>
In Routen,
Route::get('/test','test\[email protected]');
Fügen Sie Ihre Controller in Ihren Ordnern hinzu:
controllers\
---- folder1
---- folder2
Erstellen Sie Ihre Route, ohne den Ordner anzugeben:
Route::get('/product/dashboard', '[email protected]');
Lauf
composer dump-autoload
Und versuche es noch mal
Für diejenigen, die Laravel 5 verwenden, müssen Sie den Namespace für den Controller im Unterverzeichnis festlegen (Laravel 5 befindet sich noch in der Entwicklung und es werden täglich Änderungen vorgenommen.)
So erhalten Sie eine Ordnerstruktur wie:
Http
----Controllers
----Admin
PostsController.php
PostsController.php
namespace Admin\PostsController.php wie folgt:
<?php namespace App\Http\Controller\Admin;
use App\Http\Controllers\Controller;
class PostsController extends Controller {
//business logic here
}
Dann ist Ihre Route dafür:
$router->get('/', 'Admin\[email protected]');
Und schließlich sollten Sie weder Komponisten- noch Handwerker-Dumps machen
composer dump-autoload
oder
php artisan dump
1.Erstellen Sie Ihren Unterordner wie folgt:
app
----controllers
--------admin
--------home
2.konfigurieren Sie Ihren Code in app/routes.php
<?php
// index
Route::get('/', 'Home\[email protected]');
// admin/test
Route::group(
array('prefix' => 'admin'),
function() {
Route::get('test', 'Admin\[email protected]');
}
);
?>
3.schreiben Sie etw in app/controller/admin/IndexController.php, zB:
<?php
namespace Admin;
class IndexController extends \BaseController {
public function index()
{
return "admin.home";
}
}
?>
4.greifen Sie auf Ihre Site zu, zB : localhost/admin/test Sie sehen "admin.home" auf der Seite
ps: Bitte ignoriere mein schlechtes Englisch
Für ** Laravel 5 oder Laravel 5.1 LTS **, wenn Sie mehrere Controller im Admin-Ordner haben, ist Route::group
für Sie sehr hilfreich. Zum Beispiel:
Update: Funktioniert mit Laravel 5.4
Meine Ordnerstruktur:
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 {
...
In Meine Route.php setze ich namespace
group auf Api\V1
und es sieht insgesamt so aus:
Route::group(
[
'namespace' => 'Api\V1',
'prefix' => 'v1',
], function(){
Route::get('posts', ['uses'=>'[email protected]']);
Route::get('posts/{id}', ['uses'=>'[email protected]']);
});
Um Verschiebungsdetails zum Erstellen eines Unterordners zu erhalten, besuchen Sie diese link .
php artisan make:controller admin/CategoryController
Hier ist Admin das Unterverzeichnis unter app/Http/Controllers und CategoryController ist der Controller, den Sie im Verzeichnis erstellen möchten
Ich habe gerade einen Weg gefunden, wie es geht:
Fügen Sie einfach die Pfade zur Datei /app/start/global.php hinzu
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/controllers/product',
app_path().'/models',
app_path().'/database/seeds',
));
Ich benutze Laravel 4.2. Hier wie ich es mache:
Ich habe eine Verzeichnisstruktur wie diese:
app
-- Steuerungen
----Administrator
------ AdminController.php
Nachdem ich den Controller erstellt habe, habe ich in der composer.json den Pfad zum neuen Admin-Verzeichnis eingetragen:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/admin",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
Als nächstes bin ich gerannt
composer dump-autoload
und dann
php artisan dump-autoload
Dann habe ich in der routes.php den Controller so eingefügt:
Route::controller('admin', 'AdminController');
Und alles funktioniert gut.
Wenn Sie Laravel 5.3 oder höher verwenden, müssen Sie sich nicht so sehr mit der Komplexität auseinandersetzen, wie andere Antworten bereits gesagt haben. Verwenden Sie einfach den Standard-Handwerker-Befehl, um einen neuen Controller zu generieren Erstellen Sie einen User
-Controller im User
-Ordner . Ich würde eingeben
php artisan make:controller User/User
In Routen,
Route::get('/dashboard', 'User\[email protected]');
nur dies zu tun wäre gut und jetzt auf localhost/Dashboard befindet sich die Seite.
Hoffe das hilft.
In Laravel 5.6 wird angenommen, dass der Name Ihres Unterordners 'Api
ist:
In Ihrem Controller benötigen Sie diese beiden Leitungen:
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
Und in Ihrer Routendatei api.php
benötigen Sie:
Route::resource('/myapi', 'Api\MyController');
Ich denke, um die Controller für Admin und Front in separaten Ordnern zu halten, wird der Namespace gut funktionieren.
Bitte schauen Sie in die Laravel-Verzeichnisstruktur, die für mich gut funktioniert.
app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.php
Die Routen in der Datei "routes/web.php" sind wie folgt
/* All the Front-end controllers routes will work under Front namespace */
Route::group(['namespace' => 'Front'], function () {
Route::get('/home', '[email protected]');
});
Und für den Admin-Bereich wird es so aussehen
/* 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' => '[email protected]']);
});
});
Hoffe das hilft!!
ich hatte kürzlich dieses Problem mit laravel 5.8, aber ich verstehe, dass ich den Controller wie folgt richtig definieren sollte:
php artisan make:controller SubFolder\MyController // true
so nicht:
php artisan make:controller SubFolder/MyController // false
dann können Sie in routes/web.php wie folgt auf den Controller zugreifen:
Route::get('/my', 'SubFolder\[email protected]');
So können Sie Ihre App organisieren:
Jede Routendatei (web.php
, api.php
...) wird in einer map()
-Methode in einer Datei angegeben
\app\Providers\RouteServiceProvider.php
Wenn Sie eine Routendatei zuordnen, können Sie eine ->namespace($this->namespace)
für sie festlegen. Sie wird dort unter Beispielen angezeigt.
Das bedeutet, dass Sie mehr Dateien erstellen können, um Ihr Projekt strukturierter zu gestalten!
Und legen Sie für jeden von ihnen unterschiedliche Namespaces fest.
Ich bevorzuge jedoch empty string
für den Namespace ""
.
Sie können Ihre Controller so einstellen, dass sie auf eine native PHP-Weise routen, siehe das Beispiel:
Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
Jetzt können Sie Ihre Controller-Namen in Ihrer IDE doppelt anklicken, um schnell und bequem dorthin zu gelangen.