Saya baru mengenal Laravel. Untuk mencoba dan menjaga aplikasi saya tetap teratur, saya ingin meletakkan pengontrol saya ke dalam subfolder dari folder pengontrol.
controllers\
---- folder1
---- folder2
Saya mencoba merutekan ke pengontrol, tetapi laravel tidak menemukannya.
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
Apa yang saya lakukan salah?
php artisan make:controller test\TestController
membuat testTestController.php sambilphp artisan make:controller 'test\TestController'
bekerja. (Perhatikan Kutipannya) - Laravel 5.4php artisan make:controller test/TestController
Tambahkan pengontrol Anda di folder Anda:
Buat rute Anda tanpa menentukan folder:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
Lari
Dan coba lagi
sumber
artisan dump-autoload
juga ataucomposer dump-autoload
cukup?ClassLoader::addDirectories
yang tidak Anda miliki tentang komposer, Anda juga membutuhkan artisan.composer dump-autoload
bekerja untuk saya juga. Jika Anda menggunakan OS Windows, Anda dapat menggunakan file .bat untuk menjalankancomposer dump-autoload
sebagai gantinya mengetik CMD setiap saat. Inilah yang saya gunakan:PUSHD "E:\path\to\non-public" newline START /B "Window 1" composer dump-autoload newline pause
Bagi mereka yang menggunakan Laravel 5 Anda perlu mengatur namespace untuk pengontrol dalam sub-direktori (Laravel 5 masih dalam pengembangan dan perubahan terjadi setiap hari)
Untuk mendapatkan struktur folder seperti:
namespace Admin \ PostsController.php seperti ini:
<?php namespace App\Http\Controller\Admin; use App\Http\Controllers\Controller; class PostsController extends Controller { //business logic here }
Maka rute Anda untuk ini adalah:
$router->get('/', 'Admin\PostsController@index');
Dan terakhir, jangan pernah melakukan pekerjaan komposer atau pengrajin
atau
sumber
App\Http\Controllers\Auth\Controller
tidak ditemukan, mengapa itu menambahkan kataController
di sana, dan kehilangan nama pengontrol yang sebenarnya? Saya pikir itu tebasan yang melakukan itu.-o
tidak membantu.Untuk ** Laravel 5 atau Laravel 5.1 LTS keduanya **, jika Anda memiliki banyak Pengendali di folder Admin,
Route::group
akan sangat membantu Anda. Sebagai contoh:Pembaruan : Bekerja dengan Laravel 5.4
Struktur folder saya:
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 { ...
Di My Route.php, saya mengatur
namespace
grup keApi\V1
dan secara keseluruhan terlihat seperti:Route::group( [ 'namespace' => 'Api\V1', 'prefix' => 'v1', ], function(){ Route::get('posts', ['uses'=>'PostsApiController@index']); Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']); });
Untuk memindahkan detail untuk membuat sub-folder kunjungi link ini .
sumber
1. buat subfolder Anda seperti berikut:
2. konfigurasi kode Anda di 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. tulis sth di app / controllers / admin / IndexController.php, mis:
<?php namespace Admin; class IndexController extends \BaseController { public function index() { return "admin.home"; } } ?>
4. mengakses situs Anda, misalnya : localhost / admin / test Anda akan melihat "admin.home" di halaman
ps: Tolong abaikan bahasa Inggris saya yang buruk
sumber
Baru saja menemukan cara melakukannya:
Cukup tambahkan jalur ke /app/start/global.php
ClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/controllers/product', app_path().'/models', app_path().'/database/seeds', ));
sumber
Di sini admin adalah sub direktori di bawah app / Http / Controllers dan CategoryController adalah pengontrol yang ingin Anda buat di dalam direktori
sumber
Di Laravel 5.6, anggap nama subfolder Anda adalah
Api
:Di pengontrol Anda, Anda membutuhkan dua baris ini:
namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller;
Dan di file rute
api.php
Anda, Anda memerlukan:Route::resource('/myapi', 'Api\MyController');
sumber
Saya menggunakan Laravel 4.2. Berikut cara melakukannya:
Saya memiliki struktur direktori seperti ini:
app
--controllers
---- admin
------ AdminController.php
Setelah saya membuat pengontrol, saya telah meletakkan di composer.json jalur ke direktori admin baru:
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/controllers/admin", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ] },
Selanjutnya saya sudah lari
lalu
Kemudian di routes.php saya memiliki pengontrol yang disertakan seperti ini:
Route::controller('admin', 'AdminController');
Dan semuanya bekerja dengan baik.
sumber
1) Begitulah cara Anda mengatur aplikasi:
Setiap file rute (
web.php
,api.php
...) dideklarasikan dalam sebuahmap()
metode, dalam sebuah fileSaat Anda memetakan file rute, Anda dapat mengaturnya
->namespace($this->namespace)
, Anda akan melihatnya di sana di antara contoh.Artinya, Anda dapat membuat lebih banyak file untuk membuat proyek Anda lebih terstruktur!
Dan tetapkan ruang nama yang berbeda untuk masing-masingnya.
Tapi saya lebih suka mengatur
empty string
namespace""
2) Anda dapat mengatur pengontrol Anda untuk merutekan dengan cara php asli, lihat contoh:
Route::resource('/users', UserController::class); Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
Sekarang Anda dapat mengklik dua kali nama pengontrol Anda di IDE untuk mencapainya dengan cepat dan nyaman.
sumber
Jika Anda menggunakan Laravel 5.3 atau lebih tinggi, tidak perlu terlalu rumit seperti yang dikatakan jawaban lain. Cukup gunakan perintah artisan default untuk menghasilkan pengontrol baru. Misalnya, jika saya ingin membuat
User
pengontrol diUser
folder. Saya akan mengetikDi rute,
Route::get('/dashboard', 'User\User@dashboard');
melakukan ini akan baik-baik saja dan sekarang di localhost / dasbor adalah tempat halaman berada.
Semoga ini membantu.
sumber
Saya pikir untuk menjaga pengontrol untuk Admin dan Front di folder terpisah, namespace akan berfungsi dengan baik.
Silakan lihat struktur direktori Laravel di bawah ini, yang berfungsi dengan baik untuk saya.
Rute dalam file "routes / web.php" adalah seperti di bawah ini
/* All the Front-end controllers routes will work under Front namespace */ Route::group(['namespace' => 'Front'], function () { Route::get('/home', 'HomeController@index'); });
Dan untuk bagian Admin akan terlihat seperti
/* 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']); }); });
Semoga ini membantu!!
sumber
Saya mengalami masalah ini baru-baru ini dengan laravel 5.8 tetapi saya meremehkan dan saya harus mendefinisikan pengontrol dengan cara yang benar seperti ini di bawah ini:
php artisan make:controller SubFolder\MyController // true
Tidak seperti ini:
php artisan make:controller SubFolder/MyController // false
Kemudian Anda dapat mengakses pengontrol di routes / web.php seperti ini:
Route::get('/my', 'SubFolder\MyController@index');
sumber
Dalam kasus saya, saya memiliki awalan yang harus ditambahkan untuk setiap rute dalam grup, jika tidak, responsnya adalah kelas UserController tidak ditemukan.
Route::prefix('/user')->group(function() { Route::post('/login', [UserController::class, 'login'])->prefix('/user'); Route::post('/register', [UserController::class, 'register'])->prefix('/user'); });
sumber