50分钟学会Laravel 50个小技巧

50分钟学会Laravel 50个小技巧

时间 2015-12-09 17:13:45  Yuansir-web菜鸟

原文  http://www.yuansir-web.com/2015/12/09/50分钟学会laravel-50个小技巧/

主题 Laravel

转载请注明:转载自 Yuansir-web菜鸟 | LAMP学习笔记

本文链接地址: 50分钟学会Laravel 50个小技巧

原文链接:《 50 Laravel Tricks in 50 Minutes by willroth 》

Eloquent

1.Automatic model validation

class Post extends Eloquent
{
    public static $autoValidate = true;
    protected static $rules = array();

    protected static function boot()
    {
        parent::boot();
        // You can also replace this with static::creating or static::updating
        static::saving(function ($model) {
            if($model::$autoValidate) {

                return $model->validate();
            }
        });
    }

    public function validate() { }
}

2.Prevent updating

class Post extends Eloquent

{
    protected static function boot()
    {
        parent::boot();
        static::updating(function ($model) {
            return false;
        });
    }
}

3.Conditional relationships

class myModel extents Model
{
     public function category()
     {
         return $this->belongsTo(‘myCategoryModel‘, ‘categories_id‘)->where(‘users_id‘, Auth::user()->id);
     }
}

4.Expressive where syntax

$products = Product::where(‘category‘, ‘=‘, 3)->get();
$products = Product::where(‘category‘, 3)->get();
$products = Product::whereCategory(3)->get();

5.Query builder:having raw

SELECT *, COUNT(*) FROM products GROUP BY category_id HAVING count(*) > 1;

DB::table(‘products‘)
    ->select(‘*‘, DB::raw(‘COUNT(*) as products_count‘))
    ->groupBy(‘category_id‘)
    ->having(‘products_count‘, ‘>‘, 1)
    ->get();
Product::groupBy(‘category_id‘)->havingRaw(‘COUNT(*) > 1‘)->get();

6.Simple date filtering

$q->whereDate(‘created_at‘, date(‘Y-m-d‘));
$q->whereDay(‘created_at‘, date(‘d‘));
$q->whereMonth(‘created_at‘, date(‘m‘));
$q->whereYear(‘created_at‘, date(‘Y‘));

7.Save options

//src/Illuminate/Database/Eloquent/Model.php
public function save(array $options = array());

 //src/Illuminate/Database/Eloquent/Model.php
protected function performUpdate(Builder $query, array $options = [])
{
    if($this->timestamps && array_get($options, ‘timestamps‘, true)) {
        $this->updateTimestamps();
    }

    $product = Product::find($id);
    $product->updated_at = ‘2015 -01-01 10:00:00‘;
    $product->save([‘timestamps‘ => false]);

8.Multilingual support

// database/migrations/create_articles_table.php
public function up()
{
    Schema::create(‘articles‘, function (Blueprint $table) {
        $table->increments(‘id‘);
        $table->boolean(‘online‘);
        $table->timestamps();
    });
}

//database/migrations/create_articles_table.php
public function up()
{
    $table->increments(‘id‘);
    $table->integer(‘article_id‘)->unsigned();
    $table->string(‘locale‘)->index();
    $table->string(‘name‘);
    $table->text(‘text‘);
    $table->unique([‘article_id‘, ‘locale‘]);
    $table->foreign(‘article_id‘)->references(‘id‘)->on(‘articles‘)->onDelete(‘cascade‘);

}

// app/Article.php
class Article extends Model
{
    use \Dimsav\Translatable\Translatable;
    public $translatedAttributes = [‘name‘, ‘text‘];
}

// app/ArticleTranslation.php
class ArticleTranslation extends Model
{
    public $timestamps = false;
}

// app/http/routes.php

Route::get(‘{locale}‘, function ($locale) {
    app()->setLocale($locale);
    $article = Article::first();
    return view(‘article‘)->with(compact(‘article‘));
});

// resources/views/article.blade.php

<h1>{{ $article->name }}</h1>

{{ $article->text }}

9.Retrieve random rows

$questions = Question::orderByRaw(‘RAND()‘)->take(10)->get();

10.uuid model primary key

use Ramsey\Uuid\Uuid;
 trait UUIDModel
 {
     public $incrementing = false;
     protected static function boot()
     {
         parent::boot();
         static::creating(function ($model) {
             $key = $model->getKeyName();
             if(empty($model->{$key})) {
                 $model->{$key} = (string)$model->generateNewId();
             }
         });
     }

     public function generateNewUuid()
     {
         return Uuid::uuid4();
     }
 }

11.Ordered relationships

class Category extends Model
 {
     public function products()
     {
         return $this->hasMany(‘App\Product‘)->orderBy(‘name‘);
     }
 }

12.Simple incrementing & Decrementing

$customer = Customer::find($customer_id);
$loyalty_points = $customer->loyalty_points + 50;
$customer->update([‘loyalty_points‘ => $loyalty_points]);

// adds one loyalty point

Customer::find($customer_id)->increment(‘loyalty_points‘, 50);
// subtracts one loyalty point

Customer::find($customer_id)->decrement(‘loyalty_points‘, 50);

13.List with mutations

$employees = Employee::where(‘branch_id‘, 9)->lists(‘name‘, ‘id‘);
return view(‘customers . create‘, compact(‘employees‘));

 {!! Form::select(‘employee_id‘, $employees, ‘‘) !!}

 public function getFullNameAttribute() {
     return $this->name . ‘ ‘ . $this->surname;
 }

 [2015-07-19 21:47:19] local.ERROR: exception ‘PDOException‘ with message ‘SQLSTATE[42S22]: Column not found:
 1054 Unknown column ‘full_name‘ in ‘field list‘‘ in
 ...vendor\laravel\framework\src\Illuminate\Database\Connection.php:288

$employees = Employee::where(‘branch_id‘, 9)->get()->lists(‘full_name‘, ‘id‘);

14.Appending mutated properties

function getFullNameAttribute()
{
    return $this->first_name . ‘ ‘ . $this->last_name;
}

{
    "id":1,
    "first_name":"Povilas",
    "last_name":"Korop",
    "email":"[email protected]

", "created_at":"2015-06-19 08:16:58", "updated_at":"2015-06-19 19:48:09" } class User extends Model { protected $appends = [‘full_name‘]; { "id":1, "first_name":"Povilas", "last_name":"Korop", "email":" [email protected]

", "created_at":"2015-06-19 08:16:58", "updated_at":"2015-06-19 19:48:09", "full_name":"Povilas Korop" }

15.Filter only rows with child rows

class Category extends Model
{
    public function products()
    {
        return $this->hasMany(‘App\Product‘);
    }
}

public function getIndex()
{
    $categories = Category::with(‘products‘)->has(‘products‘)->get();
    return view(‘categories.index‘, compact(‘categories‘));
}

16.Return relations on model save

public function store()
{
    $post = new Post;
    $post->fill(Input::all());
    $post->user_id = Auth::user()->user_id;
    $post->user;
    return $post->save();
 }

Blade

17.Dynamic with

// eloquent
Post::whereSlug(‘slug‘)->get();

// instead of
View::make(‘posts.index‘)->with(‘posts‘, $posts);

// do this
View::make(‘posts.index‘)->withPosts($posts);

18.First/last array element

//hide all but the first item

@foreach ($menu as $item)

<div @if ($item != reset($menu)) class="hidden" @endif>

<h2>{{ $item->title }}</h2>

     </div>

@endforeach

 //apply css to last item only

 @foreach ($menu as $item)

<div @if ($item == end($menu)) class="no_margin" @endif> 

<h2>{{ $item->title }}</h2>

 </div>

@endforeach

Collections

19.Arrays as collections

$devs = [
    [‘name‘ => ‘Anouar Abdessalam‘, ‘email‘ => ‘[email protected]

‘], [‘name‘ => ‘Bilal Ararou‘, ‘email‘ => ‘[email protected]‘] ]; $devs = new Illuminate\Support\Collection($devs); $devs->first(); $devs->last(); $devs->push([‘name‘ => ‘xroot‘, ‘email‘ => ‘ [email protected]

‘]);

20.Collection filters

$customers = Customer::all();
$us_customers = $customers->filter(function ($customer) {
    return $customer->country == ‘United States‘;
});

$non_uk_customers = $customers->reject(function ($customer) {
    return $customer->country == ‘United Kingdom‘;
});

21.find()

//	returns a single row as a collection
$collection = App\Person::find([1]);

//	can return multiple rows as a collection
$collection = App\Person::find([1, 2, 3]);

22.where()

$collection = App\Person::all();
$programmers = $collection->where(‘type‘, ‘programmer‘);
$critic = $collection->where(‘type‘, ‘critic‘);
$engineer = $collection->where(‘type‘, ‘engineer‘);

23.implode()

$collection = App\Person::all();
$names = $collection->implode(‘first_name‘, ‘,‘);

24.where() & list()

// returns a collection of first names

$collection = App\Person::all()->where(‘type‘, ‘engineer‘)->lists(‘first_name‘);

// returns all the meta records for user 1
$collection = App\WP_Meta::whereUserId(1)->get();

// returns the first & last name meta values

$first_name = $collection->where(‘meta_key‘, ‘first_name‘)->lists(‘value‘)[0];
$last_name = $collection->where(‘meta_key‘, ‘last_name‘)->lists(‘value‘)[0];

25.order belongs-to-many by pivot table

class Link extends Model

 {
     public function users()
     {
         return $this->belongsToMany(‘Phpleaks\User‘)->withTimestamps();
     }
 }

@if ($link->users->count() > 0)
<strong>Recently Favorited By</strong>
 @foreach ($link->users()->orderBy(‘link_user.created_at‘, ‘desc‘)->take(15)->get() as $user)

        <a href="{{ URL::Route(‘user.show‘, array(‘id‘ => $user->id)) }}">{{ $user->name }}</a>

 @endforeach
@endif

26.sorting with closures

$collection = collect([
    [‘name‘ => ‘Desk‘],
    [‘name‘ => ‘Chair‘],
    [‘name‘ => ‘Bookcase‘]
]);

$sorted = $collection->sortBy(function ($product, $key) {
    return array_search($product[‘name‘], [1 => ‘Bookcase‘, 2 => ‘Desk‘, 3 => ‘Chair‘]);
});

27.keying arrays

$library = $books->keyBy(‘title‘);

[
    ‘Lean Startup‘ => [‘title‘ => ‘Lean Startup‘, ‘price‘ => 10],
    ‘The One Thing‘ => [‘title‘ => ‘The One Thing‘, ‘price‘ => 15],
    ‘Laravel: Code Bright‘ => [‘title‘ => ‘Laravel: Code Bright‘, ‘price‘ => 20],
    ‘The 4-Hour Work Week‘ => [‘title‘ => ‘The 4-Hour Work Week‘, ‘price‘ => 5],
]

28.grouped collections

$collection = App\Person::all();
$grouped = $collection->groupBy(‘type‘);

29.collection unions

// the point is to actually combine results from different models
$programmers = \App\Person::where(‘type‘, ‘programmer‘)->get();
$critic = \App\Person::where(‘type‘, ‘critic‘)->get();
$engineer = \App\Person::where(‘type‘, ‘engineer‘)->get();

$collection = new Collection;

$all = $collection->merge($programmers)->merge($critic)->merge($engineer);

30.collection lookaheads

$collection = collect([1 => 11, 5 => 13, 12 => 14, 21 => 15])->getCachingIterator();
foreach ($collection as $key => $value) {
    dump($collection->current() . ‘:‘ . $collection->getInnerIterator()->current());
}

Routing

31.nested route groups

Route::group([‘prefix‘ => ‘account‘, ‘as‘ => ‘account.‘], function () {

    Route::get(‘login‘, [‘as‘ => ‘login‘, ‘uses‘ => ‘[email protected]‘]);
    Route::get(‘register‘, [‘as‘ => ‘register‘, ‘uses‘ => ‘[email protected]‘]);

    Route::group([‘middleware‘ => ‘auth‘], function () {
        Route::get(‘edit‘, [‘as‘ => ‘edit‘, ‘uses‘ => ‘[email protected]‘]);
    });

});

<a href="{{ route(‘account.login‘) }}">Login</a>
<a href="{{ route(‘account.register‘) }}">Register</a>
<a href="{{ route(‘account.edit‘) }}">Edit Account</a>

32.catch-all view route

// app/Http/routes.php

Route::group([‘middleware‘ => ‘auth‘], function () {
    Route::get(‘{view}‘, function ($view) {
        try {
            return view($view);
        } catch (\Exception $e) {
            abort(404);
        }
    })->where(‘view‘, ‘.*‘);
});

33.internal dispatch

// api controller

public function show(Car $car)
{
    if(Input::has(‘fields‘)) {
        // do something
    }
}

// internal request to api - fields are lost

$request = Request::create(‘/api/cars/‘ . $id . ‘?fields=id,color‘, ‘GET‘);
$response = json_decode(Route::dispatch($request)->getContent());

// internal request to api - with fields $originalInput = Request::input();

$request = Request::create(‘/api/cars/‘ . $id . ‘?fields=id,color‘, ‘GET‘);
Request::replace($request->input());
$response = json_decode(Route::dispatch($request)->getContent());
Request::replace($originalInput);

Testing

34.evironmental varlables

// phpunit.xml

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
    <env name="DB_DATABASE" value=":memory:"/>
    <env name="DB_CONNECTION" value="sqlite"/>
    <env name="TWILIO_FROM_NUMBER" value="+15005550006"/>
</php>

//	.env.test – add to .gitignore
TWILIO_ACCOUNT_SID = fillmein
TWILIO_ACCOUNT_TOKEN = fillmein

//	access directly from your tests using helper function
env(‘TWILIO_ACCOUNT_TOKEN‘);

 // tests/TestCase.php <?php class TestCase extends Illuminate\Foundation\Testing\TestCase { /** * The base URL to use while testing the application. * * @var string */ protected $baseUrl = ‘http://localhost‘; /** * Creates the application. * * @return \Illuminate\Foundation\Application */ public function createApplication() { $app = require __DIR__ . ‘/../bootstrap/app.php‘; if(file_exists(dirname(__DIR__) . ‘/.env.test‘)) { Dotenv::load(dirname(__DIR__), ‘.env.test‘); } $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
         return $app;
     }
 }

35.run tests automatically

// gulpfile.js

 var elixir = require(‘laravel-elixir‘);

 mix.phpUnit();

 $ gulp tdd

36.share cookie between domains

// app/Http/Middleware/EncryptCookies.php
protected $except = [
    ‘shared_cookie‘

];

Cookie::queue(‘shared_cookie‘, ‘my_shared_value‘, 10080, null, ‘.example.com‘);

37.Easy model & migrations stubs

$ artisan make:model Books -m

38.add spark to existing project

$ composer require genealabs/laravel-sparkinstaller --dev

 Laravel\Spark\Providers\SparkServiceProvider::class, GeneaLabs\LaravelSparkInstaller\Providers\LaravelSparkInstallerServiceProvider::class,

 //	do not run php artisan spark:install
 $ php artisan spark:upgrade

 //	backup /resources/views/home.blade.php or it will be overwritten
 $ php artisan vendor:publish --tag=spark-full

39.customize the default error page

<?php namespace App\Exceptions; use Exception; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Symfony\Component\Debug\ExceptionHandler as SymfonyDisplayer; class Handler extends ExceptionHandler { protected function convertExceptionToResponse(Exception $e) { $debug = config(‘app.debug‘, false); if($debug) { return (new SymfonyDisplayer($debug))->createResponse($e);
        }

        return response()->view(‘errors.default‘, [‘exception‘ => $e], 500);
    }
}

40.conditional service providers

// app/Providers/AppServiceProvider.php
public function register()
{
    $this->app->bind(‘Illuminate\Contracts\Auth\Registrar‘, ‘App\Services\Registrar‘);

    if($this->app->environment(‘production‘)) {
        $this->app->register(‘App\Providers\ProductionErrorHandlerServiceProvider‘);
    } else {
        $this->app->register(‘App\Providers\VerboseErrorHandlerServiceProvider‘);
    }
}

43.extending the application

//	bootstrap/app.php

//	replace this:
$app = new Illuminate\Foundation\Application(realpath(__DIR__ . ‘/../‘));

// with this:
$app = new Fantabulous\Application(realpath(__DIR__ . ‘/../‘));

<?php namespace Fantabulous; class Application extends \Illuminate\Foundation\Application { /** * Get the path to the storage directory. * * @return string */ public function storagePath() { return $this->basePath . ‘/FantabulousStorage‘;
    }
}

44.simple chching microservice

class fakeApiCaller
 {
     public function getResultsForPath($path)
     {
         return [
             ‘status‘ => 200,
             ‘body‘ => json_encode([
                 ‘title‘ => "Results for path [$path]"
             ]),
             ‘headers‘ => [
                 "Content-Type" => "application/json"
             ]
         ];
     }
 }

 $app->get(‘{path?}‘, function ($path) {
     $result = Cache::remember($path, 60, function () use ($path) {
         return (new fakeApiCaller)->getResultsForPath($path);
     });

     return response($result[‘body‘], $result[‘status‘], array_only($result[‘headers‘], [
             ‘Content-Type‘,
             ‘X-Pagination‘
         ]));
 })->where(‘path‘, ‘.*‘);

45.use bleeding edge version

$ composer create - project laravel / laravel your-project-name-here dev-develop

 // composer.json
 {
     "require": {
     "php": ">=5.5.9", "laravel/framework": "5.2.*"
    },
    "minimum-stability": "dev"
 }

$ composer update

46.capture queries

Event::listen(‘illuminate.query‘, function ($query) {
    var_dump($query);

});

\DB::listen(function ($query, $bindings, $time) {
    var_dump($query);

    var_dump($bindings);
    var_dump($time);

});

47.authorization without models

//	app/Policies/AdminPolicy.php
class AdminPolicy
{
    public function managePages($user)
    {
        return $user->hasRole([‘Administrator‘, ‘Content Editor‘]);
    }
}

//	app/Providers/AuthServiceProvider.php

public function boot(\Illuminate\Contracts\Auth\Access\GateContract $gate)
{
    foreach (get_class_methods(new \App\Policies\AdminPolicy) as $method) {
        $gate->define($method, "App\Policies\[email protected]{$method}");
    }
    $this->registerPolicies($gate);
}

$this->authorize(‘managePages‘); // in Controllers
@can(‘managePages‘) // in Blade Templates
$user->can(‘managePages‘); // via Eloquent

48.efficient file transfer with streams

$disk = Storage::disk(‘s3‘);

$disk->put($targetFile, file_get_contents($sourceFile));

$disk = Storage::disk(‘s3‘);
$disk->put($targetFile, fopen($sourceFile, ‘r+‘));

$disk = Storage::disk(‘s3‘);

$stream = $disk->getDriver()->readStream($sourceFileOnS3);
file_put_contents($targetFile, stream_get_contents($stream), FILE_APPEND);

$stream = Storage::disk(‘s3‘)->getDriver()->readStream($sourceFile);
Storage::disk(‘sftp‘)->put($targetFile, $stream)

49.avoid overflowing log files

$schedule->call(function () {
    Storage::delete($logfile);
})->weekly();

50.pipeling

$result = (new Illuminate\Pipeline\Pipeline($container)
    ->send($something)
    ->through(‘ClassOne‘, ‘ClassTwo‘, ‘ClassThree‘)
    ->then(function ($something) {
        return ‘foo‘;
    });

51.command handler dispatch

class PurchasePodcastCommand extends Command
{
    public $user;
    public $podcast;
    public function __construct(User $user, Podcast $podcast)
    {
        $this->user = $user;
        $this->podcast = $podcast;
    }
}

class PurchasePodcastCommandHandler
{
    public function handle(BillingGateway $billing)
    {
        // Handle the logic to purchase the podcast...

        event(new PodcastWasPurchased($this->user, $this->podcast));
    }
}

class PodcastController extends Controller
{
    public function purchasePodcastCommand($podcastId)
    {
        $this->dispatch(
            new PurchasePodcast(Auth::user(), Podcast::findOrFail($podcastId))
        );
    }
}

52.self handling commands

class PurchasePodcast extends Command implements SelfHandling
{
    protected $user;
    protected $podcast;

    public function __construct(User $user, Podcast $podcast)
    {
        $this->user = $user;
        $this->podcast = $podcast;
    }

    public function handle(BillingGateway $billing)
    {
        // Handle the logic to purchase the podcast...

        event(new PodcastWasPurchased($this->user, $this->podcast));
    }

}

class PodcastController extends Controller
{
    public function purchasePodcast($podcastId)
    {
        $this->dispatch(
            new PurchasePodcast(Auth::user(), Podcast::findOrFail($podcastId))
        );
    }
}

53.automatic dispatch from requests

class PodcastController extends Controller
{
    public function purchasePodcast(PurchasePodcastRequest $request)
    {
        $this->dispatchFrom(‘Fantabulous\Commands\PurchasePodcastCommand‘, $request);
    }

}

class PodcastController extends Controller
{
    public function purchasePodcast(PurchasePodcastRequest $request)
    {
        $this->dispatchFrom(‘Fantabulous\Commands\PurchasePodcastCommand‘, $request, [
            ‘firstName‘ => ‘Taylor‘,
        ]);
    }
}

54.queued commands

class PurchasePodcast extends Command implements ShouldBeQueued, SerializesModels
{
    public $user;
    public $podcast;

    public function __construct(User $user, Podcast $podcast)
    {
        $this->user = $user;
        $this->podcast = $podcast;
    }
}

55.commands pipeline

// App\Providers\BusServiceProvider::boot
$dispatcher->pipeThrough([‘UseDatabaseTransactions‘, ‘LogCommand‘]);

class UseDatabaseTransactions
{
    public function handle($command, $next)
    {
        return DB::transaction(function () use ($command, $next) {
            return $next($command);
        });
    }
}

// App\Providers\BusServiceProvider::boot
$dispatcher->pipeThrough([
    function ($command, $next) {
        return DB::transaction(function () use ($command, $next) {
            return $next($command);
        });
    }
]);

Laravel 5.2

56.implicit model binding

// app/http/routes.php

Route::get(‘/api/posts/{post}‘, function (Post $post) {
    return $post;
});

// behind the scenes
Post::findOrFail($post);

57.append scheduler autput to a file

$schedule->command(‘emails:send‘)->hourly()->appendOutputTo($filePath);

58.collections wildcard

// returns titles for all posts

$titles = $posts->pluck(‘posts .*.title’);

59.formarray validation

<input type="text" name="person[1][id]">
     <input type="text" name="person[1][name]">

    <input type="text" name="person[2][id]"> <input type="text" name="person[2][name]">

$v = Validator:: make($request->all(), [
    ‘person.*.id‘ => ‘exists:users.id‘,
    ‘person.*.name‘ => ‘required:string‘,

]);

60.easily clear user sessions

// included in database session driver
user_id
ip_address

转载请注明:转载自 Yuansir-web菜鸟 | LAMP学习笔记

本文链接地址: 50分钟学会Laravel 50个小技巧

时间: 2024-12-09 04:02:57

50分钟学会Laravel 50个小技巧的相关文章

学会这些 pycharm 编程小技巧,编程效率提升 10 倍

PyCharm 是一款非常强大的编写 python 代码的工具.掌握一些小技巧能成倍的提升写代码的效率,本篇介绍几个经常使用的小技巧. 一.分屏展示 当你想同时看到多个文件的时候: 1.右击标签页: 2.选择 move right 或者 split vertical: 3.效果. 二.远程 Python 解释器 1.解释器设置里点击设置: 2.选择 docker, ssh 等远程解释器. 三.Live Templates live templates 主要是偷懒用的,采用事先定义好的模板,一个按

laravel获取checkbox值得小技巧

以前老是用三元运算符来判断,现在有了更好的方法: 1.html代码 <input type="hidden" name="approved" value="0"> <input type="checkbox" name="approved" value="1"> 然后在控制器获取值的时候可以这样: $value = $request->get('approv

【公众号系列】两分钟学会SAP F1技巧

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]两分钟学会SAP F1技巧 写在前面 这是以前写的一篇文章,但这个技巧可能有些人还是不太会用,拿出来和大家分享一下.做SAP系统的朋友应该都会和IMG打交道,无论是技术顾问还是业务顾问,F1是必备技能之一,有效的利用系统提供的方法,会减少很多麻烦,也会提高工作效率.还有一篇相关性技巧的文章,请在文末查看推荐阅读. 今天来简单说一个F

一些实用的 Laravel 小技巧

Laravel 中一些常用的小技巧,说不定你就用上了. 1.侧栏 网站一般都有侧栏,用来显示分类,标签,热门文章,热门评论啥的,但是这些侧栏都是相对独立的模块,如果在每一个引入侧栏的视图中都单独导入与视图有关的数据的话,未免太冗余了.所以最佳的做法是:新建一个widgets视图文件夹,再利用Laravel 的ViewComposers单独为侧栏绑定数据,这样侧栏就可以随便引入而不用关心数据是否绑定啦. 举个栗子,拿最常用的分类侧栏来说,在resources/views/widgets下新建你的分

必须学会使用的35个Jquery小技巧

query 与JS相比较,方便了许多,语法上也简便了不少,下面是Jquery常用的技巧,下面Jquery使用的方法在各个网站中都会使用到. 收集的35个 jQuery 小技巧/代码片段,可以帮你快速开发. 1. 禁止右键点击 1 2 3 4 5 $(document).ready(function(){     $(document).bind("contextmenu",function(e){         return false;     }); }); 2. 隐藏搜索文本框

5分钟掌握JavaScript小技巧

1. 删除数组尾部元素 一个简单的用来清空或则删除数组尾部元素的简单方法就是改变数组的length属性值. const arr = [11, 22, 33, 44, 55, 66]; // truncanting arr.length = 3; console.log(arr); //= [11, 22, 33] // clearing arr.length = 0; console.log(arr); //= [] console.log(arr[2]); //= undefined 2.使用

10分钟搞定老板爱看的动态报表,这些小技巧你get了吗?

某一天,老板想看公司的销售报告.你接到这个任务后,开始处理并汇总数据.你在想如何将销售统计情况汇报给老板. 或许是一张Excel表.可是它看起来不仅枯燥,而且密密麻麻的数字很难抓到重点.到底哪个产品才是最畅销的?销量冠军排行榜是怎样的?销量比去年同期增长多少?难道要老板自己拿Excel表去做分析? 于是你放弃了这个想法,决定做几张图表,通过图表来回答上面的问题,形象直观.于是你做了下面这张图,有KPI看板,销量排行榜,增长率. 这时,你不禁产生了疑问:老板真的只想知道这几个指标吗?如果老板还想看

给大家分享12个或许能在实际工作中帮助你解决一些问题的JavaScript的小技巧

使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,反之返回的是true.比如下面的示例: 01 function Account(cash) { 02 this.cash = cash; 03 this.hasMoney

12个非常实用的JavaScript小技巧

在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,反之返回的是true.比如下面的示例: func