webentwicklung-frage-antwort-db.com.de

Routing des Laravel Controller-Unterordners

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? 

67
Tino

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]');
67
Ja22

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
48
user2014679

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

9
Mervyn

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 .

7
Ariful Haque
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

6
Dipen

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',

));
6
Tino

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.

5
TodStoychev

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.

4
Koushik Das

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');
3
maxagaz

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!!

2
Mahesh Yadav

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]');
0
foad salavati

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.

0