লারাভেল ৫-এ কাস্টম সহায়কদের জন্য সেরা অভ্যাসগুলি [বন্ধ]


471

লারাভেল ৫-এর মতামতের মধ্যে কোডের পুনরাবৃত্তি এড়াতে আমি সহায়ক ফাংশন তৈরি করতে চাই:

view.blade.php

<p>Foo Formated text: {{ fooFormatText($text) }}</p>

এগুলি মূলত পাঠ্য বিন্যাসকরণের কাজ। কোথায় এবং কীভাবে আমি এই ফাংশনগুলি দিয়ে একটি ফাইল তৈরি করতে পারি?

উত্তর:


593

helpers.phpআপনার অ্যাপ ফোল্ডারে একটি ফাইল তৈরি করুন এবং সুরকারের সাথে এটি লোড করুন:

"autoload": {
    "classmap": [
        ...
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/helpers.php" // <---- ADD THIS
    ]
},

আপনার composer.jsonফাইলে এটি যুক্ত করার পরে , নিম্নলিখিত কমান্ডটি চালান:

composer dump-autoload

আপনি যদি নিজের helpers.phpফাইলটিকে আপনার appডিরেক্টরিতে রাখতে পছন্দ করেন না (কারণ এটি পিএসআর -4 নাম স্পেস ক্লাস ফাইল নয়) তবে laravel.comওয়েবসাইটটি যা করতে পারে তা করতে পারেন : helpers.php বুটস্ট্র্যাপ ডিরেক্টরিতে স্টোরটি সংরক্ষণ করুন । আপনার composer.jsonফাইলে সেট করতে মনে রাখবেন :

"files": [
    "bootstrap/helpers.php"
]

85
নুবসের জন্য টিপ: কম্পোজার.জে জসন পরিবর্তন করার পরে এই কমান্ডটি ব্যবহার করুন। সুরকার ডাম্প-
অটোলোয়াড

11
@ অ্যালফারিডমোরালস গ্রাচিয়া বা সম্ভবত 'একটি দরকারী টিপ, কারণ উত্তরটি পরিষ্কার করে না যে আপনার পরে এটি করার দরকার আছে'।
ম্যাট ম্যাকডোনাল্ড

8
লেখাগুলি দেখার পক্ষে সহজ করার জন্য আমি সহায়ক ফাংশনগুলির অনুমোদন দিচ্ছি তবে অন্যান্য উত্তরগুলিতে এই উত্তরটি কতটা রেফারেন্স করা হয়েছে তা আমি ঘৃণা করি। আমাকে ভুল করবেন না, এটি একটি ভাল উত্তর এবং সঠিক, আমি কেবল আশঙ্কা করি যে লোকেরা এটির অপব্যবহার করবে এবং অনেকগুলি খারাপ লেখা, দুর্বলভাবে সংগঠিত পিএইচপি আবার লিখতে শুরু করবে।
অ্যান্ড্রুওয়েবার 21

39
আমি এই পদ্ধতির বুঝতে পারি না। সুরকার গ্রন্থাগারগুলি অন্তর্ভুক্ত করার জন্য একটি হাতিয়ার হিসাবে বিবেচিত: লারাভেল এটি ছাড়া পুরোপুরি ভালভাবে কাজ করবে এবং লারাভেল ছাড়াই সুরকার r এই পরামর্শটি আমাদের অ্যাপের মধ্যে একটি ফাইল তৈরি করতে, আমাদের অ্যাপ্লিকেশনটি ছেড়ে, সুরকারে যেতে, সুরকারকে আমাদের অ্যাপে ফিরে যেতে এবং একটি ফাইল অন্তর্ভুক্ত করতে বলে। লারাভেল স্পষ্টতই ফাইলগুলির অন্তর্ভুক্তি পরিচালনা করে, তাই না? আমরা কেন লারাভেলের নেটিভ প্রয়োগ বাস্তবায়ন ছেড়ে দেব এবং আমাদের জন্য একটি ফাইল অন্তর্ভুক্ত করার জন্য এই বাহ্যিক সরঞ্জামটি ব্যবহার করব, এভাবে আমাদের রচনাকে আরও সুরকারের সাথে সংযুক্ত করবো? এটা কি আলস্যতা, বা আমি কিছু মিস করছি?
dKen

6
লারাভেল সমস্ত লাইব্রেরি এবং ফাইলগুলির উপর নির্ভর করে কোথায় অন্তর্ভুক্ত করবেন তা জানতে সুরকারের অটোলোডার ব্যবহার করেন। এটি বুটস্ট্র্যাপ / অটোল্যাড.এফপি রেফারেন্স করা হয়েছে। এই ফাইলটিতে মন্তব্য পড়ুন। পদ্ধতিটি হ'ল ফাইলটি রেফারেন্সটি কমপোজার জেজেসনে যুক্ত করুন, তারপরে "অটোল্যাড ডাম্প করুন", যা সুরকারের অটোলোডারকে পুনরুত্থিত করে যাতে লারাভেল এটি সন্ধান করতে পারে। সুরকারের "ফাইল" সংগ্রহটি ব্যবহার করে গ্রন্থাগারগুলি বা এক-অফ ফাংশন ফাইলগুলি সংযোজন করার ভাল উপায় যা সুরকার প্যাকেজগুলিতে ঝরঝরে নয়। সকলের জন্য একটি জায়গা থাকা আমার পক্ষে খুব সুন্দর "পরিস্থিতিগুলির জন্য আমাকে এই এক বিচিত্র ফাইলটি অন্তর্ভুক্ত করতে হবে"।
ফিলিপ হ্যারিংটন

370

Laravel 5, সহজ উপায় কাস্টম ক্লাস

এই উত্তরটি লারাভেলের মধ্যে সাধারণ কাস্টম শ্রেণীর ক্ষেত্রে প্রযোজ্য । আরও ব্লেড-নির্দিষ্ট উত্তরের জন্য, লারাভেল 5-এ কাস্টম ব্লেড নির্দেশিকা দেখুন ।

পদক্ষেপ 1: আপনার সহায়ক (বা অন্যান্য কাস্টম শ্রেণি) ফাইল তৈরি করুন এবং এটি একটি মিলবে নাম স্থান দিন। আপনার শ্রেণি এবং পদ্ধতি লিখুন:

<?php // Code within app\Helpers\Helper.php

namespace App\Helpers;

class Helper
{
    public static function shout(string $string)
    {
        return strtoupper($string);
    }
}

পদক্ষেপ 2: একটি উপনাম তৈরি করুন:

<?php // Code within config/app.php

    'aliases' => [
     ...
        'Helper' => App\Helpers\Helper::class,
     ...

পদক্ষেপ 3:composer dump-autoload প্রকল্পের রুটে চালান

পদক্ষেপ 4: এটি আপনার ফলক টেমপ্লেটে ব্যবহার করুন:

<!-- Code within resources/views/template.blade.php -->

{!! Helper::shout('this is how to use autoloading correctly!!') !!}

অতিরিক্ত ক্রেডিট: আপনার লারাভেল অ্যাপের যে কোনও জায়গায় এই শ্রেণিটি ব্যবহার করুন:

<?php // Code within app/Http/Controllers/SomeController.php

namespace App\Http\Controllers;

use Helper;

class SomeController extends Controller
{

    public function __construct()
    {
        Helper::shout('now i\'m using my helper class in a controller!!');
    }
    ...

সূত্র: http://www.php-fig.org/psr/psr-4/

এটি কেন কাজ করে: https://github.com/laravel/framework/blob/master/src/Illuminate/Support/ClassLoader.php

যেখানে অটোলেডিংয়ের সূত্রপাত: http://php.net/manual/en/language.oop5.autoload.php


35
স্পষ্টতই, এই উত্তরটি আসলে সহায়তাকারীদের সাথে কাজ করে না, যা গ্লোবাল-নেমস্পিড ফাংশন। পরিবর্তে, এটি সহায়কদের ক্লাস পদ্ধতিতে রূপান্তর করতে উত্সাহ দেয়। এটি সাধারণত সর্বোত্তম পন্থা, তবে আসলে এখানে জিজ্ঞাসিত প্রশ্নের উত্তর দেয় না, এ কারণেই অন্যান্য উত্তরগুলি তুলনা করে এত জটিল।
ড্যান হুনসেকার

1
ফাংশন সহায়ক অর্থ এটি ব্লেডেও উপলব্ধ। আপনি এই ফাংশনটি ব্লেডে কীভাবে উপলব্ধ করবেন? আপনি সাহায্যকারীকে কল করতে পারবেন না: সুন্দর জেসন (পরামিতি) ব্লেডে।
ম্যাকসি 32

@ ম্যাক্সি 32 আপনি aliasesঅ্যারের অধীনে ক্লাসটি যুক্ত করতে পারেন app/config.php: 'Helper' => App\Helpers\Helper::class, তারপরে আপনি ফলকটিতে Helper::prettyJson();ঠিক ঠিক কল করতে সক্ষম হবেন ।
হাইজিয়ান

@ ডানহানসেকার সরাসরি প্রশ্নের উত্তর দেওয়ার জন্য সম্পাদনা করেছিলেন এবং এটি এখনও একই সাধারণ পদ্ধতির। : আপনি শুধু আপনার নিজস্ব ফলক নির্দেশনা লিখতে পারেন stackoverflow.com/questions/28290332/...
heisian

1
হ্যাঁ, আমি একবার ফ্রেমওয়ার্কটি খনন করে দেখেছিলাম তারা কোথায় সাহায্যকারীদের টেনে নিয়েছে And এবং আবারও, আমি সম্পূর্ণরূপে সম্মত হই যে নামধারী গতিময় স্ট্যাটিক ক্লাসগুলির পদ্ধতিগুলি যা অনুরোধ করা হচ্ছে তার চেয়ে অনেক বেশি পরিচ্ছন্ন - বা প্রস্তাবিত - বেশিরভাগ সময়। আসল বিষয়টি হ'ল সহায়করা প্রথমদিকে লারাভেল ওয়ে নয়, বরং কোডআইগনিটার ২.x এর একটি হোল্ডওভার যা এখনও পর্যায়ক্রমে হয়নি p সুতরাং ওপিকে যেমন অনুরোধ করা হয়নি ঠিক তেমন উত্তর না দেওয়ার বিষয়ে আমার প্যাডেন্ট্রি হ'ল আপনি সাহায্যকারী পাবেন না, বরং আরও ভাল কিছু এই বিষয়টি তুলে ধরার চেষ্টা করা।
ড্যান হুনসেকার

315

আমার প্রাথমিক চিন্তাটিও সুরকার অটোলোড ছিল তবে এটি আমার কাছে খুব বেশি লারাভেল মনে হয়নি। L5 পরিষেবা সরবরাহকারীদের ভারী ব্যবহার করে, তারা হ'ল আপনার অ্যাপ্লিকেশনটিকে বুটস্ট্র্যাপ করে।

চলতে শুরু আমি আমার একটি ফোল্ডার তৈরি করা appডিরেক্টরি নামক Helpers। তারপরে Helpersফোল্ডারের মধ্যে আমি ফাংশনগুলির জন্য ফাইলগুলি যুক্ত করতে চাইছিলাম। একাধিক ফাইল সহ একটি ফোল্ডার থাকা আমাদের একটি বড় ফাইল এড়াতে দেয় যা খুব দীর্ঘ এবং নিয়ন্ত্রণহীন হয়ে পড়ে।

পরবর্তী আমি HelperServiceProvider.phpকারিগর কমান্ড চালিয়ে একটি তৈরি করেছি :

artisan make:provider HelperServiceProvider

মধ্যে registerপদ্ধতি আমি এই স্নিপেট যোগ

public function register()
{
    foreach (glob(app_path().'/Helpers/*.php') as $filename){
        require_once($filename);
    }
}

পরিশেষে আপনার config/app.phpসরবরাহকারীর অ্যারেতে পরিষেবা সরবরাহকারীর নিবন্ধন করুন

'providers' => [
    'App\Providers\HelperServiceProvider',
]

এখন আপনার Helpersডিরেক্টরিতে কোনও ফাইল লোড হয়েছে, এবং ব্যবহারের জন্য প্রস্তুত।

আপডেট 2016-02-22

এখানে অনেক ভাল বিকল্প রয়েছে তবে আমার উত্তরটি যদি আপনার পক্ষে কাজ করে তবে আমি এগিয়ে গিয়ে এইভাবে সহায়কদের অন্তর্ভুক্ত করার জন্য একটি প্যাকেজ তৈরি করেছি। আপনি হয় অনুপ্রেরণার জন্য প্যাকেজটি ব্যবহার করতে পারেন বা সুরকারের সাথে এটি নির্দ্বিধায় ডাউনলোড করতে পারেন। এটির সাহায্যে এমন কিছু বিল্ট রয়েছে যা আমি প্রায়শই ব্যবহার করি (তবে এটি ডিফল্টরূপে সমস্ত নিষ্ক্রিয়) এবং আপনাকে একটি সাধারণ আর্টিজান জেনারেটর দিয়ে আপনার নিজস্ব কাস্টম সহায়ক তৈরি করতে দেয়। এটি কোনও প্রতিক্রিয়াকারীকে ম্যাপার ব্যবহার করার পরামর্শটিও সম্বোধন করে এবং আপনাকে কাস্টম সহায়তাকারীদের লোড করার জন্য বা ডিফল্টরূপে সমস্ত পিএইচপি ফাইলগুলিকে স্বয়ংক্রিয়ভাবে আপনার সহায়ক ডিরেক্টরিতে লোড করতে সংজ্ঞা দেয় allows মতামত এবং PRs অনেক প্রশংসা করা হয়!

composer require browner12/helpers

গিথুব : ব্রাউনার 12 / সহায়ক


29
যে সমস্ত লোকদের কেবল কয়েকটি ফাংশন যুক্ত করা দরকার তাদের জন্য, সুরকার অটোল্যাড পুরোপুরি ঠিক আছে, তবে আমাদের মধ্যে যাদের অনেক সাহায্যকারী ফাংশন থাকতে পারে, তাদের জন্য একাধিক ফাইল সংগঠন আবশ্যক। এই সমাধানটি মূলত আমি এল 4-তে যা করেছি তা ছাড়া আমি আমার start.phpফাইলে ফাইলগুলি নিবন্ধভুক্ত করেছি (যা দুর্দান্ত ছিল না, তবে সময়ের জন্য এটির উদ্দেশ্যটি পরিবেশন করেছিল)। একাধিক ফাইল লোড করার জন্য আপনার কাছে অন্য পরামর্শ আছে?
অ্যান্ড্রু ব্রাউন

7
আপনার যদি একাধিক ফাইল থাকে তবে সেগুলি আপনার কমপোজার জেসন ফাইলে যুক্ত করুন। এমনকি 5-10 লাইন জোড়ার সময় তোলে পথ এখানে আছে কি এর চেয়ে বেশি অর্থে।
জোসেফ সিলবার

22
আমি মনে করি এই কৌশলটির অনেক যোগ্যতা রয়েছে। এটি মার্জিত এবং দক্ষ কারণ আপনি প্রতিবার কোনও সহায়ক ফাইল তৈরি করার সময় আপনাকে কম্পোজার.জেসন ফাইলের সাথে গোলযোগ করতে হবে না।
ইমপেটো

8
সত্যিই ভাল সমাধান। কেবলমাত্র আমি যে বিষয়গুলিতে ফাইলগুলি যুক্ত করি তা হ'ল আমি মনে করি পরিবর্তে ম্যাপার হওয়া উচিত, যেখানে আমরা যে ফাইলটি লোড করতে চাই তার নাম যুক্ত করি। ত্রুটিগুলি সম্পর্কে চিন্তা করুন! যদি ব্যর্থ হওয়া ফাইলগুলির মধ্যে একটিতে যদি কেবলমাত্র একজন সহায়ক থাকে তবে আপনাকে সেগুলি সরিয়ে ফেলা উচিত, বা সাইটটি সমাধান না করা অবধি ভেঙে ফেলা উচিত।
পাবলো ইজাকুইল লিওন

3
আপনি কি অ্যাপ \ সরবরাহকারীদের নামস্থান ব্যবহার করেন? আমি কীভাবে নিয়ামক এবং দর্শন থেকে সেই সহায়ককে কল করি। দুঃখিত, প্রশ্ন
চেংকারুক

78

JeffreyWayএই ল্যারাকাস্ট আলোচনায় এটিই প্রস্তাবিত ।

  1. আপনার app/Httpডিরেক্টরিতে একটি helpers.phpফাইল তৈরি করুন এবং আপনার ফাংশন যুক্ত করুন।
  2. এর মধ্যে composer.json, autoloadব্লকে, যুক্ত করুন "files": ["app/Http/helpers.php"]
  3. চালান composer dump-autoload

15
সাহায্যকারীরা কেবল এইচটিটিপি-র নাও হতে পারে। app/helpers.phpবা app/Helpers/আরও ভাল জায়গা বলে মনে হচ্ছে।
sepehr

1
আমরা যদি একটি শেয়ার্ড সার্ভারে থাকি এবং ব্যবহারের বিকল্প না পাই তবে কী হবে composer dump-autoload ?
user3201500

@ ইউজার 3201500 এটি অন্য একটি প্রশ্ন এবং আপনি উপরের উত্তরটি অনুসরণ করতে চাইলে আপনাকে ম্যানুয়ালি করার প্রয়োজন হতে পারে। অথবা আপনি অন্যান্য উত্তর থেকে চয়ন করতে পারেন। এবং ম্যানুয়ালি প্রতিফলিত composer dump-autoloadএই অনুসরণ করতে পারেন: developed.be/2014/08/29/composer-dump-autoload-laravel
itsazzad

55

এসও এবং গুগলে বিভিন্ন উত্তর সন্ধান করার পরেও আমি একটি অনুকূল পদ্ধতির সন্ধান করতে পারি নি। সর্বাধিক উত্তরগুলি নির্দেশ করে যে আমরা অ্যাপ্লিকেশনটি ছেড়েছি এবং কাজটি করার জন্য তৃতীয় পক্ষের সরঞ্জাম রচয়িতার উপর নির্ভর করি, তবে আমি কোনও ফাইল যুক্ত করার জন্য কোনও সরঞ্জামের সাথে মিলিত হওয়া নিশ্চিত নয়।

অ্যান্ড্রু ব্রাউনের উত্তরটি কীভাবে আমার কাছে আসা উচিত বলে মনে হয় তার সবচেয়ে কাছাকাছি এসেছিল, তবে (কমপক্ষে 5.1 এ), পরিষেবা সরবরাহকারী পদক্ষেপটি অপ্রয়োজনীয়। হাইজিয়ান এর উত্তরটি এর ব্যবহারটি হাইলাইট করে PSR-4যা আমাদের এক ধাপ কাছাকাছি নিয়ে আসে। দর্শকদের সহায়তার জন্য এখানে আমার চূড়ান্ত বাস্তবায়ন:

প্রথমে একটি নেমস্পেস সহ আপনার অ্যাপ্লিকেশন ডিরেক্টরিতে যে কোনও জায়গায় একটি সহায়ক ফাইল তৈরি করুন:

namespace App\Helpers;

class BobFinder
{
    static function bob()
    {
        return '<strong>Bob?! Is that you?!</strong>';
    }
}

এর পরে, আপনার বর্গ ওরফে মধ্যে config\app.php, এ aliasesঅ্যারে:

'aliases' => [
    // Other aliases
    'BobFinder' => App\Helpers\BobFinder::class
]

এবং এটি আপনার করা দরকার। PSR-4এবং উপনামটির সাহায্যকারীটিকে আপনার দর্শনগুলিতে প্রকাশ করা উচিত, তাই আপনার দৃষ্টিতে, যদি আপনি টাইপ করেন:

{!! BobFinder::bob() !!}

এটি আউটপুট করা উচিত:

<strong>Bob?! Is that you?!</strong>

এই পোস্ট করার জন্য ধন্যবাদ। @ ড্যান-হুনসেকার যেমন আমার সমাধানটিতে উল্লেখ করেছেন আমরা এখনও বিশ্বব্যাপী-নেমস্পিড ফাংশন দিয়ে শেষ করি নি, অর্থাৎ সহজভাবে লিখতে সক্ষম হয়েছি {!! bob() !!}। আরও কিছু অনুসন্ধান করতে যাচ্ছি এবং এটি সম্ভব কিনা তা দেখার জন্য
হিজিয়ান

1
আমি এটি সম্পর্কে আরও ভেবেছি এবং bob()সত্যিকার অর্থে বিশ্বব্যাপী করার চেষ্টা করা বুদ্ধিমানের কাজ হবে না। নেমস্পেসগুলি একটি কারণে রয়েছে এবং আমাদের bob()বেস পিএইচপি ফাংশনগুলির পাশাপাশি কল করা উচিত নয় । আমি আমার কোডে আপনার এলিয়াসিং বিট যুক্ত করব - ধন্যবাদ!
হাইজিয়ান

1
আমি এটি সর্বোত্তম হিসাবে খুঁজে
পেয়েছি

কেন আছে extends Helper? এটি আমার পক্ষে প্রয়োজনীয় বলে মনে হচ্ছে না।
বার্নি

@ বার্নি @ ইউজার 3201500 দুঃখিত টিম, আমার নিজস্ব বেস হেল্পার ক্লাস ছিল যা আমার সমস্ত সহায়করা উত্তরাধিকার সূত্রে প্রাপ্ত; extends Helperপ্রকৃতপক্ষে প্রয়োজন নেই। সতর্ক থাকুন জন্য ধন্যবাদ।
dKen

31

লারাভেল 5 এ কাস্টম ব্লেড নির্দেশিকা

হ্যাঁ, এটি করার আরও একটি উপায় আছে!

পদক্ষেপ 1: একটি কাস্টম ব্লেড নির্দেশিকা নিবন্ধন করুন:

<?php // code in app/Providers/AppServiceProvider.php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Blade; // <-- This is important! Without it you'll get an exception.

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
     public function boot()
     {
         // Make a custom blade directive:
         Blade::directive('shout', function ($string) {
             return trim(strtoupper($string), '(\'\')');
         });

         // And another one for good measure:
         Blade::directive('customLink', function () {
             return '<a href="#">Custom Link</a>';
         });
     }
    ...

পদক্ষেপ 2: আপনার কাস্টম ব্লেড নির্দেশিকাটি ব্যবহার করুন:

<!-- // code in resources/views/view.blade.php -->

@shout('this is my custom blade directive!!')
<br />
@customLink

আউটপুট:

এটি আমার কাস্টম ব্লাড ডিটারেক্টিভ !!
কাস্টম লিঙ্ক


সূত্র: https://laravel.com/docs/5.1/blade#extending-blade

অতিরিক্ত পঠন: https://mattstauffer.co/blog/custom-conditionals-with-laravels-blade-directives


আপনি যে কোনও জায়গায় যেভাবে ব্যবহার করতে পারবেন এমন কাস্টম ক্লাস কীভাবে সেরা বানাতে হয় তা শিখতে চাইলে লারভেল ৫-এ কাস্টম ক্লাসগুলি দেখুন , সহজ উপায়


এটি সেরা উত্তর হিসাবে চিহ্নিত করা উচিত, কারণ প্রশ্ন ছিল "কিছু মতামতের মধ্যে কোড পুনরাবৃত্তি এড়ানো"। কীওয়ার্ডটি ভিউউস। :)
আলেকসান্ডার্স

23

এটি আমার হেল্পারপ্রভাইডার.এফপি ফাইল:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class HelperServiceProvider extends ServiceProvider
{
    protected $helpers = [
        // Add your helpers in here
    ];

    /**
     * Bootstrap the application services.
     */
    public function boot()
    {
        //
    }

    /**
     * Register the application services.
     */
    public function register()
    {
        foreach ($this->helpers as $helper) {
            $helper_path = app_path().'/Helpers/'.$helper.'.php';

            if (\File::isFile($helper_path)) {
                require_once $helper_path;
            }
        }
    }
}

আপনার ফোল্ডারের Helpersনীচে নামক একটি ফোল্ডার তৈরি করা উচিত app, তারপরে whatever.phpভিতরে কল করা ফাইল তৈরি করুন এবং whatever$ সহায়তাকারী অ্যারের ভিতরে স্ট্রিং যুক্ত করুন ।

সম্পন্ন!

সম্পাদন করা

আমি আর এই বিকল্পটি ব্যবহার করছি না, আমি বর্তমানে সহায়কগুলির মতো স্থির ফাইলগুলি লোড করতে সুরকার ব্যবহার করছি using

আপনি এখানে সরাসরি সহায়কগুলি যুক্ত করতে পারেন:

...
"autoload": {
    "files": [
        "app/helpers/my_helper.php",
        ...
    ]
},
...

glob()অ্যান্ড্রু ব্রাউন যেমন লিখেছেন সেভাবে ডিরেক্টরিতে সমস্ত ফাইল লোড না করে ম্যাপার তৈরির জন্য পারফরম্যান্স ছাড়া অন্য কোনও কারণ আছে কি ? আপনি যে ফাইলগুলি অন্তর্ভুক্ত করতে চান তা নির্দিষ্ট করতে সক্ষম হতে চাইলে, composer.jsonজোসেফ সিলবার যেমন লিখেছেন সেগুলিকে অটোলোড করার জন্য কেন ফাইলগুলিকে নির্দিষ্ট করে না ? আপনি এই সমাধানটি কেন পছন্দ করেন? আমি বলছি না এটি একটি খারাপ সমাধান, আমি কেবল কৌতূহলী।
পিলমার্ড করা হয়েছে

3
সাহায্যকারীদের বাছাই / সক্ষম / অক্ষম করা ম্যাপ করা পদ্ধতির সাহায্যে সহজ, উদাহরণস্বরূপ, সহায়কগুলির মধ্যে একটিতে ব্রেকিং ত্রুটি রয়েছে। এটি বলেছিল যে কোনও পরিষেবা সরবরাহকারীর মধ্যে ফাইল ম্যাপিং composer.jsonদুটি পয়েন্ট ব্যতীত এগুলি করা থেকে খুব আলাদা নয় - প্রথমত, এটি একটি মেটাডেটা ফাইলের পরিবর্তে মানচিত্রটিকে অ্যাপ্লিকেশনের ভিতরেই রাখে; দ্বিতীয়ত, composer dump-autoloadপ্রতিবার লোড হওয়ার জন্য ফাইলের তালিকা পরিবর্তন করার সময় আপনাকে পুনরায় চালানোর দরকার হয় না ।
ড্যান হুনসেকার

প্রয়োজন নেই includeবা require, লারাভেল ইতিমধ্যে অন্তর্নির্মিত পিএসআর -4 অটোলোয়েড করেছে
হাইজিয়ান

1
পিএসআর -4 এবং সুরকার ব্যবহার আপনাকে সাহায্যকারীদের অন / অফ করার অনুমতি দেয় না।
পাবলো ইজাকুইল লিওন

@ পাবলোএজিউইললিওন এবং আমি কীভাবে এটি একটি নিয়ামক বা ব্লেড ফাইলের মধ্যে ব্যবহার করব? এটি সর্বোত্তম বিকল্প হিসাবে দেখায় আপনি যদি সমস্ত কন্ট্রোলারের জন্য সমস্ত সহায়ককে প্রতিটি সময় লোড না করার বিষয়ে উদ্বিগ্ন হন তবে লারাভেলের (আমার মতো) নতুনদের জন্য এটি ভাল নয়।
ভিনগারিয়া

12

আমার লারাভেল প্রকল্পে কাস্টম সহায়ক লাইব্রেরিগুলির জন্য, আমি Librariesআমার নামে একটি ফোল্ডার তৈরি করেছিLaravel/App ডিরেক্টরিতে এবং লাইব্রেরি ডিরেক্টরিতে , আমি বিভিন্ন সহায়ক লাইব্রেরির জন্য বিভিন্ন ফাইল তৈরি করেছি।

আমার সহায়ক ফাইলগুলি তৈরি করার পরে আমি all সমস্ত ফাইলগুলিকে আমার কমপোজারজেসন ফাইলের মধ্যে সহজভাবে অন্তর্ভুক্ত করি

...
"autoload": {
        "classmap": [
            "database"
        ],
        "files": [
            "app/Libraries/commonFunctions.php"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
...

এবং কার্যকর

composer dump-autoload

composer dump-autoloadএবং composer dumpautoloadপ্রকৃতপক্ষে কাজ করেও কাজ composer duকরবে ...
অক্ষয় খালে

10

যেহেতু ওপি সেরা অনুশীলনের জন্য বলেছে , আমি মনে করি আমরা এখনও এখানে কিছু ভাল পরামর্শ অনুপস্থিত।

একটি একক সহায়ক.এইচপিপি ফাইল একটি ভাল অনুশীলন থেকে দূরে। প্রথমত কারণ আপনি বিভিন্ন ধরণের ফাংশন মিশ্রিত করেন, তাই আপনি ভাল কোডিং নীতিবিরোধী। তাছাড়া, এই পারে না শুধুমাত্র কোড ডকুমেন্টেশন কিন্তু মত কোড মেট্রিক্স আঘাত Cyclomatic জটিলতা , Maintainability ইনডেক্স এবং Halstead, ভলিউম । আপনার যত বেশি ক্রিয়াকলাপ তত বেশি খারাপ হয়।

কোড ডকুমেন্টেশন phpDocamentor এর মতো সরঞ্জাম ব্যবহার করে ঠিক হবে , তবে সামি ব্যবহার করে এটি প্রক্রিয়াভিত্তিক ফাইলগুলি রেন্ডার করে না । লারাভেল এপিআই ডকুমেন্টেশন এমন একটি মামলা - কোনও সহায়ক ফাংশন ডকুমেন্টেশন নেই: https://laravel.com/api/5.4

কোড মেট্রিকগুলির মতো সরঞ্জামগুলির সাথে বিশ্লেষণ করা যায় পিএইচপিমেট্রিক্সের । ল্যারাভেল 5.4 ফ্রেমওয়ার্ক কোড বিশ্লেষণ করতে পিএইচপিমেট্রিক্স সংস্করণ 1.x ব্যবহার করা আপনাকে এসসিআর / ইলুমিনেট / ফাউন্ডেশন / হেল্পার্স.এফপি এবং এসসিআর / আলোকিত / সহায়তা / সহায়তা / সহায়তাকারীদের জন্য খুব খারাপ সিসি / এমআই / এইচভি মেট্রিক্স দেবে ph ফাইল ।

একাধিক প্রাসঙ্গিক সহায়ক ফাইল (যেমন স্ট্রিং_হেল্পার্স.পিএফপি , অ্যারে_হেল্পার্স.এফপি , ইত্যাদি) অবশ্যই এই খারাপ মেট্রিকগুলিকে উন্নত করবে যার ফলস্বরূপ ম্যানটেন করার সহজ কোড হবে। ব্যবহৃত কোড ডকুমেন্টেশন জেনারেটরের উপর নির্ভর করে এটি যথেষ্ট ভাল হবে।

স্থিতিশীল পদ্ধতির সাহায্যকারী শ্রেণি ব্যবহার করে এটি আরও উন্নত করা যায় যাতে তারা নামের স্থানগুলি ব্যবহার করে প্রাসঙ্গিক করে তোলা যায়। ঠিক কীভাবে লারাভেল ইতিমধ্যে Illuminate\Support\Strএবং এর সাথে কী করেIlluminate\Support\Arr ক্লাস করে। এটি কোড মেট্রিক / সংস্থা এবং ডকুমেন্টেশন উভয়েরই উন্নতি করে। ক্লাস অ্যালিয়াসগুলি তাদের ব্যবহার সহজ করার জন্য ব্যবহার করা যেতে পারে।

ক্লাসগুলির সাথে কাঠামো কোড সংস্থাগুলি এবং ডকুমেন্টেশনগুলিকে আরও ভাল করে তোলে তবে অন্যদিকে আমরা সেই দুর্দান্ত সংক্ষিপ্ত এবং বিশ্বব্যাপী ফাংশনগুলি স্মরণে রাখতে সহজ করে ফেলেছি। আমরা সেই স্ট্যাটিক ক্লাস পদ্ধতিতে ফাংশন এলিয়াস তৈরি করে সেই পদ্ধতির আরও উন্নতি করতে পারি। এটি ম্যানুয়ালি বা গতিশীলভাবে করা যেতে পারে।

লারাভেল অভ্যন্তরীণভাবে স্থিত শ্রেণীর পদ্ধতির মানচিত্রের পদ্ধতিগত সহায়ক ফাইলগুলিতে ফাংশন ঘোষণা করে প্রথম পদ্ধতির ব্যবহার করে। আপনার সমস্ত জিনিস (ডকব্লক / আর্গুমেন্ট) পুনরায় ঘোষণার প্রয়োজন হওয়ায় এটি আদর্শ জিনিস নাও হতে পারে।
আমি ব্যক্তিগতভাবে একটি HelperServiceProviderশ্রেণীর সাথে একটি গতিশীল পদ্ধতির ব্যবহার করি যা মৃত্যুর সময়গুলিতে এই ফাংশন তৈরি করে:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class HelperServiceProvider extends ServiceProvider
{
    /**
     * The helper mappings for the application.
     *
     * @var array
     */
    protected $helpers = [
        'uppercase' => 'App\Support\Helpers\StringHelper::uppercase',
        'lowercase' => 'App\Support\Helpers\StringHelper::lowercase',
    ];

    /**
     * Bootstrap the application helpers.
     *
     * @return void
     */
    public function boot()
    {
        foreach ($this->helpers as $alias => $method) {
            if (!function_exists($alias)) {
                eval("function {$alias}(...\$args) { return {$method}(...\$args); }");
            }
        }
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

কেউ বলতে পারেন এটি ইঞ্জিনিয়ারিং শেষ হয়েছে তবে আমি তা মনে করি না। এটি বেশ ভাল এবং বিপরীতভাবে কাজ করে যা প্রত্যাশা করা হতে পারে এটি পিএইচপি 7.x ব্যবহার করার সময় প্রাসঙ্গিক কার্যকর সময় ব্যয় করে না।


8

লারাভেল 5 টি দ্রুত তৈরি করার জন্য আমি এখানে তৈরি একটি বাশ শেল স্ক্রিপ্ট।

আপনার লারাভেল 5 ইনস্টলেশন ডিরেক্টরিতে এটি চালান।

এটিকে কল করুন:

make_facade.sh -f <facade_name> -n '<namespace_prefix>'

উদাহরণ:

make_facade.sh -f helper -n 'App\MyApp'

আপনি যদি এই উদাহরণটি চালনা করেন তবে এটি ডিরেক্টরিগুলি তৈরি করে Facadesএবং Providers'আপনার_লারাভিল_ইনস্টলেশন_ডির / অ্যাপ / মাই অ্যাপ' এর অধীনে।

এটি নিম্নলিখিত 3 টি ফাইল তৈরি করবে এবং এগুলি স্ক্রিনে আউটপুট দেবে:

./app/MyApp/Facades/Helper.php
./app/MyApp/Facades/HelperFacade.php
./app/MyApp/Providers/HelperServiceProvider.php

এটি সম্পন্ন হওয়ার পরে এটি নীচের মতো একটি বার্তা প্রদর্শন করবে:

===========================
    Finished
===========================

Add these lines to config/app.php:
----------------------------------
Providers: App\MyApp\Providers\HelperServiceProvider,
Alias: 'Helper' => 'App\MyApp\Facades\HelperFacade',

সুতরাং 'কনফিগারেশন / অ্যাপ্লিকেশন। Php' তে সরবরাহকারী এবং এলিয়াস তালিকা আপডেট করুন

চালান composer -o dumpautoload

"./App/Myapp/Facades/Helper.php" মূলত এর মতো দেখাবে:

<?php

namespace App\MyApp\Facades;


class Helper
{
    //
}

এখন "./app/MyApp/Facades/Helper.php" এ আপনার পদ্ধতি যুক্ত করুন।

"./App/Myapp/Facades/Helper.php" দেখে মনে হচ্ছে আমি কোনও সহায়ক ফাংশন যুক্ত করেছি।

<?php

namespace App\MyApp\Facades;

use Request;

class Helper
{
    public function isActive($pattern = null, $include_class = false)
    {
        return ((Request::is($pattern)) ? (($include_class) ? 'class="active"' : 'active' ) : '');
    }
}

This is how it would be called:
===============================

{!!  Helper::isActive('help', true) !!}

এই ফাংশনটি একটি প্যাটার্ন আশা করে এবং একটি anচ্ছিক দ্বিতীয় বুলিয়ান যুক্তি গ্রহণ করতে পারে।

যদি বর্তমান URL টি এতে পাস করা প্যাটার্নটির সাথে মেলে তবে এটি 'সক্রিয়' (অথবা 'শ্রেণি = "সক্রিয়" "আউটপুট দেবে যদি আপনি ফাংশন কলের দ্বিতীয় আর্গুমেন্ট হিসাবে' সত্য 'যোগ করেন)।

আমি এটি সক্রিয় মেনুটি হাইলাইট করতে ব্যবহার করি।

নীচে আমার স্ক্রিপ্টের উত্স কোড দেওয়া আছে। আমি আশা করি আপনি এটি দরকারী বলে মনে করেন এবং আপনার যদি এটির সাথে কোনও সমস্যা থাকে তবে দয়া করে আমাকে জানান।

#!/bin/bash

display_syntax(){
    echo ""
    echo "  The Syntax is like this:"
    echo "  ========================"
    echo "      "$(basename $0)" -f <facade_name> -n '<namespace_prefix>'"
    echo ""
    echo "  Example:"
    echo "  ========"
    echo "      "$(basename $0) -f test -n "'App\MyAppDirectory'"
    echo ""
}


if [ $# -ne 4 ]
then
    echo ""
    display_syntax
    exit
else
# Use > 0 to consume one or more arguments per pass in the loop (e.g.
# some arguments don't have a corresponding value to go with it such
# as in the --default example).
    while [[ $# > 0 ]]
    do
        key="$1"
            case $key in
            -n|--namespace_prefix)
            namespace_prefix_in="$2"
            echo ""
            shift # past argument
            ;;
            -f|--facade)
            facade_name_in="$2"
            shift # past argument
            ;;
            *)
                    # unknown option
            ;;
        esac
        shift # past argument or value
    done
fi
echo Facade Name = ${facade_name_in}
echo Namespace Prefix = $(echo ${namespace_prefix_in} | sed -e 's#\\#\\\\#')
echo ""
}


function display_start_banner(){

    echo '**********************************************************'
    echo '*          STARTING LARAVEL MAKE FACADE SCRIPT'
    echo '**********************************************************'
}

#  Init the Vars that I can in the beginning
function init_and_export_vars(){
    echo
    echo "INIT and EXPORT VARS"
    echo "===================="
    #   Substitution Tokens:
    #
    #   Tokens:
    #   {namespace_prefix}
    #   {namespace_prefix_lowerfirstchar}
    #   {facade_name_upcase}
    #   {facade_name_lowercase}
    #


    namespace_prefix=$(echo ${namespace_prefix_in} | sed -e 's#\\#\\\\#')
    namespace_prefix_lowerfirstchar=$(echo ${namespace_prefix_in} | sed -e 's#\\#/#g' -e 's/^\(.\)/\l\1/g')
    facade_name_upcase=$(echo ${facade_name_in} | sed -e 's/\b\(.\)/\u\1/')
    facade_name_lowercase=$(echo ${facade_name_in} | awk '{print tolower($0)}')


#   Filename: {facade_name_upcase}.php  -  SOURCE TEMPLATE
source_template='<?php

namespace {namespace_prefix}\Facades;

class {facade_name_upcase}
{
    //
}
'


#  Filename: {facade_name_upcase}ServiceProvider.php    -   SERVICE PROVIDER TEMPLATE
serviceProvider_template='<?php

namespace {namespace_prefix}\Providers;

use Illuminate\Support\ServiceProvider;
use App;


class {facade_name_upcase}ServiceProvider extends ServiceProvider {

    public function boot()
    {
        //
    }

    public function register()
    {
        App::bind("{facade_name_lowercase}", function()
        {
            return new \{namespace_prefix}\Facades\{facade_name_upcase};
        });
    }

}
'

#  {facade_name_upcase}Facade.php   -   FACADE TEMPLATE
facade_template='<?php

namespace {namespace_prefix}\Facades;

use Illuminate\Support\Facades\Facade;

class {facade_name_upcase}Facade extends Facade {

    protected static function getFacadeAccessor() { return "{facade_name_lowercase}"; }
}
'
}


function checkDirectoryExists(){
    if [ ! -d ${namespace_prefix_lowerfirstchar} ]
    then
        echo ""
        echo "Can't find the namespace: "${namespace_prefix_in}
        echo ""
        echo "*** NOTE:"
        echo "           Make sure the namspace directory exists and"
        echo "           you use quotes around the namespace_prefix."
        echo ""
        display_syntax
        exit
    fi
}

function makeDirectories(){
    echo "Make Directories"
    echo "================"
    mkdir -p ${namespace_prefix_lowerfirstchar}/Facades
    mkdir -p ${namespace_prefix_lowerfirstchar}/Providers
    mkdir -p ${namespace_prefix_lowerfirstchar}/Facades
}

function createSourceTemplate(){
    source_template=$(echo "${source_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g')
    echo "Create Source Template:"
    echo "======================="
    echo "${source_template}"
    echo ""
    echo "${source_template}" > ./${namespace_prefix_lowerfirstchar}/Facades/${facade_name_upcase}.php
}

function createServiceProviderTemplate(){
    serviceProvider_template=$(echo "${serviceProvider_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g')
    echo "Create ServiceProvider Template:"
    echo "================================"
    echo "${serviceProvider_template}"
    echo ""
    echo "${serviceProvider_template}" > ./${namespace_prefix_lowerfirstchar}/Providers/${facade_name_upcase}ServiceProvider.php
}

function createFacadeTemplate(){
    facade_template=$(echo "${facade_template}" | sed -e 's/{namespace_prefix}/'${namespace_prefix}'/g' -e 's/{facade_name_upcase}/'${facade_name_upcase}'/g' -e 's/{facade_name_lowercase}/'${facade_name_lowercase}'/g')
    echo "Create Facade Template:"
    echo "======================="
    echo "${facade_template}"
    echo ""
    echo "${facade_template}" > ./${namespace_prefix_lowerfirstchar}/Facades/${facade_name_upcase}Facade.php
}


function serviceProviderPrompt(){
    echo "Providers: ${namespace_prefix_in}\Providers\\${facade_name_upcase}ServiceProvider,"
}

function aliasPrompt(){
    echo "Alias: '"${facade_name_upcase}"' => '"${namespace_prefix_in}"\Facades\\${facade_name_upcase}Facade'," 
}

#
#   END FUNCTION DECLARATIONS
#


###########################
## START RUNNING SCRIPT  ##
###########################

display_start_banner

init_and_export_vars
makeDirectories 
checkDirectoryExists
echo ""

createSourceTemplate
createServiceProviderTemplate
createFacadeTemplate
echo ""
echo "==========================="
echo "  Finished TEST"
echo "==========================="
echo ""
echo "Add these lines to config/app.php:"
echo "----------------------------------"
serviceProviderPrompt
aliasPrompt
echo ""

8

আপনার কাস্টম সহায়ক ক্লাসটি অন্তর্ভুক্ত করার পরিবর্তে আপনি আসলে আপনার যুক্ত করতে পারেন config/app.php ফাইলটিতে ।

এই মত চেহারা উচিত।

 'aliases' => [ 
    ...
    ...
    'Helper' => App\Http\Services\Helper::class,
 ]

এবং তারপরে আপনার কন্ট্রোলারের কাছে 'সাহায্যকারী ব্যবহার করুন' পদ্ধতিটি ব্যবহার করে সাহায্যকারীকে অন্তর্ভুক্ত করুন যাতে আপনি কেবল নিজের সহায়ক শ্রেণিতে কিছু পদ্ধতি কল করতে পারেন।

eg. Helper::some_function();

বা রিসোর্স ভিউতে আপনি সরাসরি ইতিমধ্যে হেল্পার ক্লাসে কল করতে পারেন।

eg. {{Helper::foo()}}

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


4

কাস্টম সহায়কদের ডিরেক্টরি তৈরি করুন : প্রথমে অ্যাপ্লিকেশন ডিরেক্টরিতে সহায়তাকারীদের ডিরেক্টরি তৈরি করুন। Hlper শ্রেণীর সংজ্ঞা তৈরি করুন: আসুন এখন একটি সাধারণ সহায়ক ফাংশন তৈরি করুন যা দুটি স্ট্রিংকে সংহত করে। /App/Helpers/MyFuncs.php এ একটি নতুন ফাইল MyFuncs.php তৈরি করুন নিম্নলিখিত কোড যুক্ত করুন

<?php

namespace App\Helpers;

class MyFuncs {

    public static function full_name($first_name,$last_name) {
        return $first_name . ', '. $last_name;   
    }
}

নেমস্পেস অ্যাপ \ সহায়ক; অ্যাপ্লিকেশন নেমস্পেসের অধীনে সহায়কদের নাম স্থান সংজ্ঞায়িত করে। MyFuncs বর্গ {… the সহায়ক শ্রেণি MyFuncs সংজ্ঞায়িত করে। সর্বজনীন স্ট্যাটিক ফাংশন পূর্ণ নাম ($ প্রথম_নাম, $ সর্বশেষ নাম) {… একটি স্ট্যাটিক ফাংশন সংজ্ঞায়িত করে যা দুটি স্ট্রিং প্যারামিটার গ্রহণ করে এবং একটি সংক্ষিপ্ত স্ট্রিং দেয়

সহায়ক পরিষেবা ক্লাস সরবরাহ

পরিষেবা সরবরাহকারীগণ অটো লোড ক্লাসে ব্যবহৃত হয়। আমাদের এমন একটি পরিষেবা সরবরাহকারীর সংজ্ঞা দেওয়া দরকার যা আমাদের অ্যাপ্লিকেশন / সহায়তা সহায়ক ডিরেক্টরিতে সহায়তাকারী ক্লাসগুলির সমস্ত লোড করবে।

নিম্নলিখিত কারিগর কমান্ড চালান:

পিএইচপি কারিগর মেক করুন: সরবরাহকারী হেল্পার সার্ভিসপ্রোভাডার

ফাইলটি তৈরি করা হবে /app/Providers/HelperServiceProvider.php

Open /app/Providers/HelperServiceProvider.php

নিম্নলিখিত কোড যুক্ত করুন:

<?php 

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class HelperServiceProvider extends ServiceProvider {

   /**
    * Bootstrap the application services.
    *
    * @return void
    */
   public function boot()
   {
      //
   }

   /**
    * Register the application services.
    *
    * @return void
    */
   public function register()
   {
        foreach (glob(app_path().'/Helpers/*.php') as $filename){
            require_once($filename);
        }
   }
}

এখানে,

namespace App\Providers; defines the namespace provider
use Illuminate\Support\ServiceProvider; imports the ServiceProvider class namespace
class HelperServiceProvider extends ServiceProvider {…} defines a class HelperServiceProvider that extends the ServiceProvider class
public function boot(){…} bootstraps the application service
public function register(){…} is the function that loads the helpers
foreach (glob(app_path().'/Helpers/*.php') as $filename){…} loops through all the files in /app/Helpers directory and loads them.

আমাদের এখন হেল্পার সার্ভিস প্রোভাইডারটি নিবন্ধন করতে হবে এবং আমাদের সহায়কদের জন্য একটি উপাধি তৈরি করতে হবে।

/config/app.phpফাইল খুলুন

সরবরাহকারী অ্যারে ভেরিয়েবল সন্ধান করুন

নিম্নলিখিত লাইন যুক্ত করুন

App\Providers\HelperServiceProvider::class,

এলিয়াস অ্যারে ভেরিয়েবল সন্ধান করুন

নিম্নলিখিত লাইন যুক্ত করুন

'MyFuncs' => App\Helpers\MyFuncs::class,

আমাদের কাস্টম সহায়ক ব্যবহার করে পরিবর্তনগুলি সংরক্ষণ করুন

আমরা এমন একটি রুট তৈরি করব যা আমাদের কাস্টম সহায়ক ফাংশনটিকে ওপেন / অ্যাপ্লিকেশন / ক্রপস.পিএফ বলবে

নিম্নলিখিত রুটের সংজ্ঞা যুক্ত করুন

Route::get('/func', function () {
    return MyFuncs::full_name("John","Doe");
});

এখানে,

return MyFuncs::full_name("John","Doe"); calls the static function full_name in MyFuncs class

4

প্রথমে অ্যাপ্লিকেশন \ এইচটিটিপি ডিরেক্টরিতে helpers.php তৈরি করুন। তারপরে composer.json এর মধ্যে নিম্নলিখিত কোডটি যুক্ত করুন

"autoload": {
        "classmap": [
            "database"
        ],
        "files": [
            "app/Http/helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },

এরপরে নিম্নলিখিত কমান্ডটি চালান

composer dump-autoload

এখন আপনি helpers.php ফাইলের মধ্যে আপনার কাস্টম ফাংশনটি সংজ্ঞায়িত করতে পারেন।


3

আমি যে অন্য উপায়টি ব্যবহার করেছি তা হ'ল: 1) অ্যাপ্লিকেশন \ ফোল্ডারনাম \ ফাইলনেম.এফপিতে একটি ফাইল তৈরি করেছিল এবং এর ভিতরে এই কোডটি ছিল

<?php
namespace App\library
{
 class hrapplication{
  public static function libData(){
   return "Data";
  }
 }
}
?>

2) আমাদের ব্লেড এর পরে

 $FmyFunctions = new \App\FolderName\classsName;
  echo $is_ok = ($FmyFunctions->libData());

এটাই. এবং এটি কাজ করে


3

কাস্টম সহায়কদের লেখার সেরা অনুশীলন

1) appপ্রকল্পের মূলের ডিরেক্টরিটির ভিতরে , হেল্পার্স নামে একটি ফোল্ডার তৈরি করুন (কোডটি আলাদা এবং কাঠামোর জন্য)।

2) ফোল্ডারের ভিতরে psr-4 ফাইল বা স্বাভাবিক পিএইচপি ফাইল লিখুন

যদি পিএইচপি ফাইলগুলি পিএসআর -4 ফর্ম্যাটে থাকে তবে এটি স্বয়ংক্রিয়ভাবে লোড হবে, অন্যথায় প্রকল্পের মূল ডিরেক্টরিতে থাকা কমপোজার জেসসন-এ নিম্নলিখিত লাইনটি যুক্ত করুন

autoloadকীটির অভ্যন্তরে , filesঅটো লোডের সময় ফাইলগুলি লোড করার জন্য একটি নতুন কী তৈরি filesকরুন, বস্তুর অভ্যন্তরে অ্যাপ ডিরেক্টরি থেকে শুরু হওয়া পথটি যুক্ত করুন, এখানে একটি উদাহরণ।

"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/Helpers/customHelpers.php"
    ]
},
"autoload-dev": {
    "classmap": [
        "tests/TestCase.php"
    ]
},

পিএস: composer dump-autoloadফাইলটি লোড না হলে চলার চেষ্টা করুন ।


3

অ্যাপ / হেল্পার / হেল্পার্স.এফপি এ হেল্পার্স.এফপি তৈরি করুন

namespace App\Helper
class Helpers
{


}

সুরকার এবং সুরকার আপডেটে যুক্ত করুন

 "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories",
            "database","app/Helper/Helpers.php"
        ],
        "psr-4": {
            "App\\": "app/"
        },
         "files": ["app/Helper/Helpers.php"]
    },

নিয়ামক ব্যবহার করুন

অ্যাপ্লিকেশন \ সহায়তাকারী \ সহায়তাকারীদের ব্যবহার করুন

দৃশ্য ব্যবহার config-> app.php ফাইলে পরিবর্তন

   'aliases' => [
    ...
    'Helpers'   => 'App\Helper\Helpers'
    ],

দেখুন কল

<?php echo Helpers::function_name();  ?>

আপনাকে ধন্যবাদ, আপনার ব্যাখ্যাটি কিছুটা প্রসারিত করতে আপনার মনে হবে?
ফিলিপ ভাল্ডেস

2
ক্লাসটি যদি নাম composer.jsonস্পিড হয় তবে ফাইলটি যুক্ত করা অকেজো, যেহেতু পিএসআর -4 অটোলোয়াড কাজটি করবে।
আর্সেনিসালাস

2

দির বুটস্ট্র্যাপে \ অটোল্যাড.পিপি

require __DIR__.'/../vendor/autoload.php';
require __DIR__.'/../app/Helpers/function.php'; //add

এই ফাইলটি যুক্ত করুন

app\Helpers\function.php

2

**

  • স্থিতি সহায়ক

** নতুন সহায়ক তৈরি করুন

<?php

namespace App\Helpers;

use Illuminate\Database\Eloquent\Collection;

class StatusHelper
{
 protected static $_status = [
        1=> [
            'value' => 1,
            'displayName' => 'Active',
        ],
        2 => [
            'value' => 2,
            'displayName' => 'Inactive',
        ],
        3 => [
            'value' => 3,
            'displayName' => 'Delete',
        ],

    ];

     public static function getStatusesList()
    {
        $status = (new Collection(self::$_status))->pluck('displayName', 'value')->toArray();


        return $status;
    }
}

নিয়ামক এবং যে কোনও ভিউ ফাইলের জন্য ব্যবহার করুন

use App\Helpers\StatusHelper;

class ExampleController extends Controller
{
        public function index()
        {
            $statusList = StatusHelper::getStatusesList();

            return view('example.index', compact('statusList'));
        }
}

0

লারাভেল ৫.৩ এবং তার উপরে, লারাভেল টিম সমস্ত প্রক্রিয়াজাত ফাইল ( routes.php) app/ডিরেক্টরি থেকে সরিয়ে নিয়েছে এবং পুরো app/ফোল্ডারটি হ'লpsr-4 স্বয়ংক্রিয়ভাবে সজ্জিত। গৃহীত উত্তরটি এই ক্ষেত্রে কাজ করবে তবে এটি আমার কাছে সঠিক মনে হয় না।

সুতরাং আমি যা করেছি তা হ'ল আমি helpers/আমার প্রকল্পের মূলে একটি ডিরেক্টরি তৈরি করেছি এবং এর সাহায্যকারী ফাইলগুলি এর ভিতরে রেখেছি এবং আমার composer.jsonফাইলে আমি এটি করেছি:

...
"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "helpers/ui_helpers.php"
    ]
},
...

এইভাবে আমার app/ডিরেক্টরিটি এখনও একটি পিএসআর -4 স্বতঃআলঙ্কিত, এবং সহায়করা কিছুটা আরও সুসংহত।

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


0

এখানে কিছু দুর্দান্ত উত্তর রয়েছে তবে আমি মনে করি এটি সবচেয়ে সহজ। লারাভেল ৫.৪ (এবং সম্ভবত পূর্ববর্তী সংস্করণগুলিও) আপনি আপনার জন্য কোথাও সুবিধাজনক একটি ক্লাস তৈরি করতে পারেন, যেমন অ্যাপ / লাইব্রেরি / হেল্পার.এফপি

class Helper() {
    public function uppercasePara($str) {
        return '<p>' .strtoupper($str). '<p>;
    }
}

তারপরে আপনি এটিকে আপনার ব্লেড টেম্পলেটে সহজেই এটি কল করতে পারেন:

@inject('helper', \App\Libraries\Helper)
{{ $helper->drawTimeSelector() }}

আপনি যদি @ ইনজেক্ট ব্যবহার করতে না চান তবে কেবল 'বড় হাতের পাপড়া' ফাংশনটিকে স্থির হিসাবে তৈরি করুন এবং আপনার ব্লেড টেম্পলেটে কলটি এম্বেড করুন:

{{ \App\Libraries\Helper::drawTimeSelector() }}

এলিয়াসের দরকার নেই। লারাভেল স্বয়ংক্রিয়ভাবে কংক্রিট বর্গটি সমাধান করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.