লারাভেল 4 হেল্পার এবং বেসিক ফাংশনগুলির জন্য সেরা অভ্যাসগুলি?


152

লারাভেল ৪-তে একটি বিশ্বব্যাপী ফাংশন রাখার জন্য আমি সেরা স্থানটি বোঝার চেষ্টা করছি For উদাহরণস্বরূপ, তারিখের বিন্যাসকরণ। আমি মনে করি না যে সম্মুখদেশগুলি খুব মডিউলার হিসাবে একটি মুখোমুখি তৈরি করা উপযুক্ত is আমি একটি লাইব্রেরি ফোল্ডার তৈরি এবং সেখানে ক্লাসগুলি সংরক্ষণ সম্পর্কে নিবন্ধগুলি পড়েছি তবে এটি সাধারণ ফাংশনের জন্যও অনেকটা মনে হয়। ব্লেড টেম্পলেটগুলিতে এর মতো কোনও 'সরঞ্জাম' থাকা উচিত নয়?

এর মতো কিছুর জন্য সর্বোত্তম অনুশীলনগুলি কী এবং আমি কীভাবে এটি ব্লেড টেম্পলেটগুলিতে উপলব্ধ করব?

উত্তর:


233

কুরুচিপূর্ণ, অলস এবং জঘন্য উপায়: শেষে bootstrap/start.php, একটি যুক্ত করুন include('tools.php')এবং নতুন ফাইলে আপনার ফাংশনটি রাখুন।

পরিষ্কার উপায়: একটি লাইব্রেরি তৈরি করুন। আপনি যখন এটি ব্যবহার করেন কেবল তখনই এটি স্বয়ংক্রিয়ভাবে চালিত হবে।

  • librariesআপনার appফোল্ডারের ভিতরে একটি ফোল্ডার তৈরি করুন
  • আপনার লাইব্রেরি ফাইল তৈরি করুন, এতে একটি শ্রেণি তৈরি করুন এবং এতে স্থির ফাংশন যুক্ত করুন
  • বিকল্প 1 : অ্যারেতে start/global.phpযুক্ত app_path().'/libraries'করতে সম্পাদনা করুন ClassLoader::addDirectories(
  • বিকল্প 2 : অ্যারেতে composer.jsonযুক্ত "app/libraries"করতে সম্পাদনা করুন autoload। চালানcomposer dump-autoload
  • আপনার দর্শন থেকে আপনার শ্রেণি এবং স্থির ফাংশন কল করুন।

global.phpফাইল থেকে উদ্ধৃত আপনার বিকল্পগুলি সম্পর্কে

সুরকার ব্যবহারের পাশাপাশি আপনি নিজের কন্ট্রোলার এবং মডেলগুলি লোড করতে লারাভেল বর্গ লোডার ব্যবহার করতে পারেন। সুরকার আপডেট না করে আপনার সমস্ত ক্লাসকে "গ্লোবাল" নেমস্পেসে রাখার জন্য এটি দরকারী।

আপনি উভয় বিকল্পকে একত্রিত করতে পারেন, যেখানে লারাভেল শ্রেণির লোডার স্বয়ংক্রিয়ভাবে নিবন্ধিত ডিরেক্টরিগুলির ক্লাসগুলির জন্য অনুসন্ধান করবে ( বিকল্প 1 , সহজ) এবং সুরকার সমস্ত ক্লাসের রেকর্ড রাখবেন তবে এটি আপডেট করার পরেই ( বিকল্প 2 , পারফরম্যান্সের উন্নতি করতে পারে)।


3
আমি মনে করি আপনাকে app_path().'/library'গ্লোবাল.এফপি শুরুতেও রাখতে হবে।
আলেকজান্দ্রে বুটিনস্কি

2
@ অ্যালেক্সান্দ্রেবুটেনস্কি ভাল পয়েন্ট এটি প্রতিবার সুরকারকে আপডেট না করেই লাইবারি যুক্ত করার অনুমতি দেবে। এটি যুক্ত করতে আমি আমার পোস্ট সম্পাদনা করেছি।
আলেকজান্দ্রে ডানাল্ট

সুতরাং আমি IDK ... সাইটহেল্পার্স নামে একটি শ্রেণি তৈরি করি এবং তারপরে একটি পদ্ধতি বিন্যাসের তারিখ নির্ধারণ করি। এবং তারপরে টেমপ্লেটে আমার কী সাইটহেল্পার :: ফর্ম্যাটডেট ($ তারিখ) করতে সক্ষম হওয়া উচিত?
জেসন স্পিক

@ জেসনস্পিক হ্যাঁ, এবং নিশ্চিত করুন যে আপনি নিজের ফাইলটির নাম দিয়েছেনsitehelpers.php
আলেকজান্ড্রে ডানাল্ট

3
আপনাকে কেন এটি সুরকারের অটোল্যাডের পাশাপাশি গ্লোবাল.এফপি ফাইলটিতে যুক্ত করতে হবে?
ক্যাশসক্লে

82

আমার এটি করার /appউপায়টি হল আপনার লারাভেল 4 প্রকল্পের মূলের ডিরেক্টরিতে একটি নতুন ফোল্ডার তৈরি করা । তারপরে /app/start/global.phpফাইলটির প্রথম অ্যারেতে এই ফোল্ডারটি যুক্ত করুন :

<?php

ClassLoader::addDirectories(array(

app_path().'/commands',
app_path().'/controllers',
app_path().'/models',
app_path().'/database/seeds',
app_path().'/classes', // This line is the one I've added.

));

যতক্ষণ না নতুন /app/classesফোল্ডারের মধ্যে ফোল্ডার কাঠামোটি আপনার নামস্পেসিং কনভেনশন অনুসরণ করে। লারাভেল 4 এই ফোল্ডারের মধ্যে থাকা সমস্ত শ্রেণি / ফাইলগুলিকে অটোলোড করবে। এইভাবে কোনও সুরকার ফাইল খনন বা সুরকার কমান্ড চালানোর দরকার নেই।

নিশ্চিত না যে এটি সর্বোত্তম অনুশীলন কিনা তবে এটি অবশ্যই কার্যকর হয়।

আপনি যদি /app/classes/Helpers/Helper.phpএই জাতীয় নামক একটি সাধারণ ফাইল তৈরি করেন:

<?php namespace Helpers;

class Helper {

    public static function helloWorld()
    {
        return 'Hello World';
    }
}

আপনাকে যা করতে হবে তা হ'ল কল Helpers\Helper::helloWorld();

আপনি নিজের /app/config/app.phpফাইলটিতে এই সহায়ক সহায়ক বর্গও রাখতে পারেন । aliasesঅ্যারের শেষে এই জাতীয় কিছু যুক্ত করুন :

'Helper'          => 'Helpers\Helper'

4
আমি এই উপায়টি পছন্দ করি কারণ আপনাকে কোনও সুরকার-ইশ, একটি পরিষ্কার এবং উত্কৃষ্ট সমাধানের সাথে মিশ্রিত করতে হবে না। +1
Gadoma

3
আপনি যদি আপনার অ্যাপ্লিকেশন.এফপিপি ফাইলটিতে আপনার সহায়ক শ্রেণীর যোগ করতে চান তবে আপনি এখন সরাসরি ক্লাসটি এখান থেকে অ্যাক্সেস করতে পারবেন: সহায়ক: হেলো ওয়ার্ল্ড ();
হেলমুট গ্র্যান্ডা

সাহায্যকারী একটি বর্গ হতে হবে? আমি এখানে একটি সাধারণ ফাংশন সংজ্ঞায়িত করতে পারি?
ওয়েবিনান

2
আপনি যদি সুরকার.জসন সম্পাদনা না করে এবং সুরকার ডাম্পটোলএড চালনা না করেন তবে এটি কাজ করে না
রোমি

1
দুর্দান্ত সমাধান। রমি যেমনটি বলেছেন, দৌড়াতে ভুলবেন না composer dump-autoload- আমি করলাম এবং 20 মিনিট আমার মাথা আঁচড়ে কাটিয়েছি।
আল_মানচেস্টার

25

লারাভেলের হেল্পার্স.এইচপিপি পদ্ধতিটি হ'ল এটি আপনার "ফাইলগুলিতে" সংমিশ্রণে যুক্ত করুন ( https://github.com/laravel/framework/blob/master/composer.json ):

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

আমি যা করি তা হচ্ছে ছোট ক্লাসগুলি তৈরি করা (শ্রেণি প্রতি কয়েকটি পদ্ধতি, পদ্ধতিতে এক লাইন, সবকিছু থেকে কোনও কিছু বাড়ানো এবং ডিআরওয়াই, এটি আমার লক্ষ্য),

class ExtendedCarbon extends Carbon\Carbon {

    public function formatDDMMAAAA($date)
    {
        /// format and return
    }

}

এগুলি অ্যাপ্লিকেশন / লাইব্রেরিতে তাদের সংরক্ষণ করুন এবং সুরকারে যুক্ত করুন:

"autoload": {
    "classmap": [
        ...
        "app/libraries",
        ...
    ],
},

এক্সিকিউট

composer dump

এবং তারপরে যেখানে আপনার প্রয়োজন সেখানে কেবল সেগুলি ব্যবহার করুন

$formatted = (new ExtendedCarbon)->formatDDMMAAAA($date);

রিফ্যাক্টরিং সম্পর্কে এই ভিডিওটি দেখুন: http://www.youtube.com/watch?v=DC-pQPq0acs

যাইহোক, আমি এক ধরণের নিশ্চিত যে এটি কেবল একটি উদাহরণ ছিল তবে তারিখগুলি বিন্যাস করতে আপনার কোনও সাহায্যকারীর দরকার নেই, যেহেতু লারাভেলের সমস্ত তারিখগুলি কার্বনের উদাহরণ ( https://github.com/briannesbitt/Carbon ) এবং তারিখ এবং সময় বিন্যাস করতে এর প্রচুর পদ্ধতি রয়েছে।


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

7

View::share()এটি অর্জনের জন্য আপনি ক্লোজারগুলির সাথে একসাথেও ব্যবহার করতে পারেন - আমি এই সম্পর্কে কেবল পোস্ট করেছি: http://www.develophp.org/2014/07/laravel-4-blade-helper-funitions/

যুক্ত সুবিধা: আপনার একটি অতিরিক্ত শ্রেণি তৈরি করার প্রয়োজন নেই এবং বিশ্বব্যাপী নেমস্পেসও পরিষ্কার রাখতে হবে।


আমি এই পদ্ধতির পছন্দ। আরও রেল-ইশ আমরা কীভাবে কোনও বৈশিষ্ট্যের ভিতরে সমস্ত ভিউ-সহায়ক পদ্ধতি যুক্ত করতে এবং সেগুলি ব্লেড দৃশ্যে উপলব্ধ করতে পারি?
বিবস্থ 18

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