লারাভেল কন্ট্রোলার সাবফোল্ডার রুটিং


96

আমি লারাভেলে নতুন। আমার অ্যাপ্লিকেশনটিকে সংগঠিত করার চেষ্টা এবং রাখার জন্য আমি আমার কন্ট্রোলারগুলিকে নিয়ন্ত্রণকারী ফোল্ডারের সাবফোল্ডারগুলিতে রাখতে চাই।

controllers\
---- folder1
---- folder2

আমি একটি নিয়ামকের দিকে রুট করার চেষ্টা করেছি, কিন্তু লারাভেল এটি খুঁজে পায় না।

Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');

আমি কি ভুল করছি?

উত্তর:


115

উপরে লারাভেল 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');

লারাভেল ৪.২ এর জন্য উপরেরটি অর্জনের কোনও উপায় আছে
সাগর অরোরা

11
php artisan make:controller test\TestControllerটেস্টস্টেস্টন্ট্রোলআরএফপি তৈরি করে যেখানে php artisan make:controller 'test\TestController'কাজ করে। (উক্তিটি দ্রষ্টব্য) - লারাভেল 5.4
জিওভান্নি এস

4
php artisan make:controller test/TestController
অমৃত শ্রেষ্ঠ

73

আপনার ফোল্ডারে আপনার নিয়ন্ত্রকগুলি যুক্ত করুন:

controllers\
---- folder1
---- folder2

আপনার রুটটি ফোল্ডারটি নির্দিষ্ট করে না তৈরি করুন:

Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');

চালান

composer dump-autoload

এবং আবার চেষ্টা করো


আমার মনে হয় আপনার artisan dump-autoloadখুব দরকার বা composer dump-autoloadযথেষ্ট?
রিক্যৌসিন

4
/ নিয়ন্ত্রকদের জন্য, কেবল সুরকার। তবে আপনার যদি ClassLoader::addDirectoriesসুরকারের কিছু না থাকে তবে আপনার খুব কারিগর প্রয়োজন।
আন্তোনিও কার্লোস রিবেইরো

আমি হঠাৎ করে মনে করেছি আমি এরকম কিছু মুখোমুখি হয়েছি ..
ওপির

composer dump-autoloadআমার জন্য কাজ। আপনি যদি উইন্ডোজ ওএস ব্যবহার করেন, আপনি প্রতিবার composer dump-autoloadসিএমডি টাইপের পরিবর্তে চালানোর জন্য একটি .bat ফাইল ব্যবহার করতে পারেন । এটি আমিই ব্যবহার করছি: PUSHD "E:\path\to\non-public" newline START /B "Window 1" composer dump-autoload newline pause
ভিনসা

7
আমাদের যদি ফোল্ডার 1 এবং ফোল্ডার 2 তে একই নামের দুটি কন্ট্রোলার থাকে তবে কী হবে? উদাহরণস্বরূপ: অ্যাডমিন / পোস্টসন্ট্রোলআরএফপি এবং ফ্রন্টএন্ড / পোস্টসন্ট্রোলআরপিপি
জেন্নিন

50

যারা লারাভেল 5 ব্যবহার করছেন তাদের জন্য আপনাকে সাব-ডিরেক্টরিতে নিয়ামকের জন্য নেমস্পেস সেট করতে হবে (লারাভেল 5 এখনও বিকাশে চলছে এবং প্রতিদিন পরিবর্তনগুলি ঘটছে)

একটি ফোল্ডার কাঠামো পেতে যেমন:

Http
----Controllers
    ----Admin
            PostsController.php
    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

1/23/15 হিসাবে আমার জন্য কাজ করেছেন। L5 আউট না হওয়াতে এটি পরে পরিবর্তন হতে পারে।
সেহুমেল

এই সামান্য জোয়ার জন্য ধন্যবাদ। LV4 এ আপনি 'অ্যাপ্লিকেশন অ্যাপ্লিকেশন \ এইচটিটিপি \ কন্ট্রোলারস \ কন্ট্রোলার; এড়িয়ে যেতে সক্ষম হয়েছিলেন; বিবৃতি কারণ আপনি বেসকন্ট্রোলার প্রসারিত করেছেন যা নিয়ামক থেকে সরাসরি উত্তরাধিকার সূত্রে প্রাপ্ত। LV5- তে কেস নেই কারণ এটি সরাসরি কন্ট্রোলারকে প্রসারিত করে এবং পিএসআর -4 অটোলয়েডিং কন্ট্রোলারটি কোথায় খুঁজে পায় তা জানতে হবে।
লিওনেল মরিসন

4
@ ব্যবহারকারী? পিএইচপি নেমস্পেস অ্যাপ \ এইচটিটিপি p কন্ট্রোলার \ অ্যাডমিন; শেষে কন্ট্রোলার [গুলি] হওয়া উচিত
সোভেন ভ্যান ডেন বুগার্ট

এটি আমার পক্ষে কাজ করেছিল, যে রচনাটি আমাকে সুরকারের বিবৃতিতে "-o" যুক্ত করতে হয়েছিল যেমন: সুরকার ডাম্প-অটোল্যাড -o
স্কট বাইয়ার্স

এটি আমার পক্ষে কাজ করে না, ত্রুটি বার্তাটি এখন App\Http\Controllers\Auth\Controllerখুঁজে পাওয়া যায় নি, কেন এটি Controllerসেখানে শব্দ যুক্ত করা হয়, এবং নিয়ামকের আসল নামটি হারাতে থাকে? আমি মনে করি এটি স্ল্যাশ এটি করছে। -oসাহায্য করেনি।
22 তে ব্লেম

15

** লারাভেল 5 বা লারাভেল 5.1 এলটিএস উভয়ের জন্যই ** আপনার যদি অ্যাডমিন ফোল্ডারে একাধিক কন্ট্রোলার থাকে তবে আপনার Route::groupপক্ষে সত্যই সহায়ক হবে। উদাহরণ স্বরূপ:

আপডেট : লারাভেল 5.4 এর সাথে কাজ করে

আমার ফোল্ডার কাঠামো:

Http
----Controllers
    ----Api
          ----V1
                 PostsApiController.php
                 CommentsApiController.php
    PostsController.php

পোস্টঅ্যাপিকন্ট্রোলার:

<?php namespace App\Http\Controllers\Api\V1;

use App\Http\Requests;
use App\Http\Controllers\Controller;   
use Illuminate\Http\Request;

class PostApiController extends Controller {  
...

আমার রুট.এফপি-তে, আমি namespaceগ্রুপ সেট করেছি Api\V1এবং সামগ্রিকভাবে দেখতে এটি দেখতে:

Route::group(
        [           
            'namespace' => 'Api\V1',
            'prefix' => 'v1',
        ], function(){

            Route::get('posts', ['uses'=>'PostsApiController@index']);
            Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']);

    });

সাব-ফোল্ডার তৈরি করতে সরানোর বিশদগুলির জন্য এই লিঙ্কটি দেখুন


4
লারাভেল 5.4 এর জন্য এটি এখন পর্যন্ত আমি খুঁজে পেয়েছি solution
mosh442

নিখুঁত সমাধান
আলী আদিল


গেম চেঞ্জার ;-)
স্ট্র্যাব

9

আপনার সাবফোল্ডারটি ঠিক অনুসরণের মতো তৈরি করুন:

app
----controllers
--------admin
--------home

আপনার কোডটি অ্যাপ / রুটস.পিপি-তে কনফিগার করুন

<?php
// index
Route::get('/', 'Home\HomeController@index');

// admin/test
Route::group(
    array('prefix' => 'admin'), 
    function() {
        Route::get('test', 'Admin\IndexController@index');
    }
);
?>

অ্যাপ্লিকেশন / কন্ট্রোলার / অ্যাডমিন / সূচককন্ট্রোলআরএফপিতে 3. লিখুন, উদাহরণস্বরূপ:

<?php
namespace Admin;

class IndexController extends \BaseController {

    public function index()
    {
        return "admin.home";
    }
}
?>

৪. আপনার সাইটে অ্যাক্সেস করুন, যেমন : লোকালহোস্ট / অ্যাডমিন / পরীক্ষা আপনি পৃষ্ঠায় "অ্যাডমিন.হোম" দেখতে পাবেন

PS: দয়া করে আমার দুর্বল ইংরেজি উপেক্ষা করুন


4
নেমস্পেস ব্যবহার করে নামকরণের সংঘর্ষ এড়ানো যায়। +1
এফডিস্ক

6

কীভাবে এটি করা যায় তার একটি সন্ধান পেয়েছি:

কেবলমাত্র /app/start/global.php এ পাথগুলি যুক্ত করুন

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/controllers/product',
    app_path().'/models',
    app_path().'/database/seeds',

));

4
ভুল যেহেতু / কন্ট্রোলাররা ইতিমধ্যে লারাভেলের কম্পোজার.জেসন বেসে রয়েছে তাই এর নীচের যে কোনও কিছুই স্বয়ংক্রিয়ভাবে স্বয়ংক্রিয়ভাবে সজ্জিত। আপনার গ্লোবাল.এফপিতে আপনাকে / নিয়ন্ত্রণকারী / পণ্য যুক্ত করার দরকার নেই।
আন্তোনিও কার্লোস রিবেইরো

4
@ অ্যান্টোনিও কার্লোস রিবেইরো ফোল্ডারে মডেল রাখার চেষ্টা করে আমার এই সমস্যা হয়েছে, তবে সুরকার এবং কারিগর অটোলোডস ডাম্পিং কাজ করছে বলে মনে হচ্ছে না। আপনাকে সেগুলি কম্পোজার.জেসন বা গ্লোবাল.পিপি
রিক্যৌসিন

4
এটি যাচাই করা সহজ: রচয়িতা ডু চালানোর পরে, ওপেন বিক্রেতার / সুরকার / অটোলোয়াড_ক্লাসম্যাপ.পিপি এবং আপনার শ্রেণি অবশ্যই সেখানে তালিকাবদ্ধ থাকতে হবে।
আন্তোনিও কার্লোস রিবেইরো

6
php artisan make:controller admin/CategoryController

এখানে অ্যাডমিনটি অ্যাপ্লিকেশন / এইচটিটিপি / কন্ট্রোলারগুলির আওতাধীন সাব ডিরেক্টরি রয়েছে এবং বিভাগের নিয়ন্ত্রণকারী আপনি নিয়ন্ত্রক হিসাবে ভিতরে ডিরেক্টরি তৈরি করতে চান


6

লারাভেল 5.6 এ, আপনার সাবফোল্ডারের নামটি ধরে নেওয়া হচ্ছে Api:

আপনার নিয়ামকটিতে আপনার এই দুটি লাইন দরকার:

namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;

এবং আপনার রুট ফাইলটিতে api.phpআপনার প্রয়োজন:

Route::resource('/myapi', 'Api\MyController');

5

আমি লারাভেল ৪.২ ব্যবহার করছি। এখানে আমি এটি কীভাবে করব:
আমার মতো এটির একটি ডিরেক্টরি কাঠামো রয়েছে:
অ্যাপ্লিকেশন -
নিয়ন্ত্রণকারী
---- অ্যাডমিন
------ অ্যাডমিনকন্ট্রোলআরএফপি

আমি নিয়ামক তৈরির পরে আমি নতুন প্রশাসক ডিরেক্টরিতে রচনাটি কম্পোজার.জেসনে রেখেছি:

"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

তারপরে রুটস.এফপিতে আমার কাছে কন্ট্রোলারটি অন্তর্ভুক্ত রয়েছে:

Route::controller('admin', 'AdminController');

এবং সবকিছু ঠিকঠাক কাজ করে।


আমার জন্য কাজ করে এবং আমার কেবল 'সুরকার ডাম্প-
অটোল্যাড

শুধু যে কোনও ক্ষেত্রে আমি পিএইচপি কারিগর ডাম্প-অটোল্যাড ব্যবহার করছি।
টডর টডোরভ

5

1) এইভাবে আপনি নিজের অ্যাপটিকে সংগঠিত করতে পারেন:

প্রতিটি রুট ফাইল ( web.php, api.php...) কোনও map()পদ্ধতিতে, কোনও ফাইলে ঘোষণা করা হয়

\app\Providers\RouteServiceProvider.php

যখন আপনি কোনও রুট ফাইল ম্যাপিং করবেন তখন আপনি ->namespace($this->namespace)এটির জন্য একটি সেট সেট করতে পারেন , আপনি উদাহরণের মধ্যে এটি সেখানে দেখতে পাবেন।

এর অর্থ হল যে আপনি আপনার প্রকল্পটিকে আরও কাঠামোগত করতে আরও ফাইল তৈরি করতে পারেন!

এবং তাদের প্রত্যেকের জন্য পৃথক নেমস্পেস সেট করুন।

তবে আমি empty stringনেমস্পেসের জন্য সেট পছন্দ করি""

2) আপনি নিজের কন্ট্রোলারদের একটি নেটিভ পিএইচপি উপায়ে রুট করতে পারেন, উদাহরণটি দেখুন:

Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');

দ্রুত এবং সুবিধার্থে সেখানে যাওয়ার জন্য আপনি এখন আপনার আইডিইতে আপনার নিয়ন্ত্রকের নামগুলিতে দ্বিগুণ ক্লিক করতে পারেন।


সেরা উত্তর! লারাভেলের সাথে সম্পূর্ণ সুসংগত এবং ফ্রেমওয়ার্কটি ইতিমধ্যে বাক্সের বাইরে কী সরবরাহ করে তার উপরে তৈরি of
jfoliveira

4

যদি আপনি লারাভেল ৫.৩ বা তার বেশি ব্যবহার করেন তবে অন্যান্য উত্তরগুলির মতো এত জটিলতায় .োকার দরকার নেই। নতুন নিয়ামক তৈরি করতে কেবল ডিফল্ট কারিগর কমান্ডটি ব্যবহার করুন। উদাহরণস্বরূপ, যদি আমি ফোল্ডারে একটি Userনিয়ামক তৈরি করতে চাই User। আমি টাইপ করব

php artisan make:controller User/User

রুটে,

Route::get('/dashboard', 'User\User@dashboard');

কেবল এটি করা ভাল হবে এবং এখন লোকালহোস্ট / ড্যাশবোর্ডে যেখানে পৃষ্ঠাটি রয়েছে।

আশাকরি এটা সাহায্য করবে.


3

আমি মনে করি অ্যাডমিন এবং ফ্রন্টের জন্য আলাদা ফোল্ডারে কন্ট্রোলার রাখব, নামস্থানটি ভাল কাজ করবে।

নীচে লারাভেল ডিরেক্টরি কাঠামোটি দেখুন, এটি আমার পক্ষে ভাল কাজ করে।

app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.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']);                                   
    });
});

আশাকরি এটা সাহায্য করবে!!


1

ল্যারাভেল ৫.৮ নিয়ে সম্প্রতি আমার এই সমস্যাটি ছিল তবে আমি কমই অনুমান করি এবং নীচের মতো ঠিক মতো কন্ট্রোলারটিও আমার সংজ্ঞা দেওয়া উচিত:

php artisan make:controller SubFolder\MyController  // true

এটার মত না:

php artisan make:controller SubFolder/MyController  // false

তারপরে আপনি রুটস / ওয়েব.এফপিতে এই জাতীয় নিয়ামক অ্যাক্সেস করতে পারেন:

Route::get('/my', 'SubFolder\MyController@index');

0

আমার ক্ষেত্রে আমার একটি উপসর্গ ছিল যা গ্রুপের প্রতিটি রুটের জন্য যুক্ত করতে হয়েছিল, অন্যথায় প্রতিক্রিয়াটি হ'ল ইউজারকন্ট্রোলার শ্রেণি খুঁজে পাওয়া যায় নি।

Route::prefix('/user')->group(function() {
    Route::post('/login', [UserController::class, 'login'])->prefix('/user');
    Route::post('/register', [UserController::class, 'register'])->prefix('/user');
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.