> 做了,不代表做好; n做好,不代表做完; n做完,不代表抽离; n抽离,不代表无关; n无关,不代表遗忘; n遗忘,不代表不存在。nn一个任务的完成过程中各个阶段的相对性和关联性。它强调了每一步的重要性和保持对任务持续关注的价值。nn继续展开这些思考,我们可以进一步理解这些阶段在实际工作和生活中的意义:nn做了,不代表做好:这意味着仅仅开始行动并不足以保证成功。我们需要确保工作不仅开始了,而且是以正确的方式进行。nn做好,不代表做完:即使我们做得很好,也必须确保任务已经彻底完成。有时,我们可能觉得自己的工作质量很高,但实际上可能还有未完成的部分。nn做完,不代表抽离:即使任务已经完成,我们也不应该立即放弃对它的关注。这可能意味着后续的检查、修订,或者从中吸取经验教训。nn抽离,不代表无关:当我们从一项任务中抽身时,这并不意味着它对我们不重要了。相反,它可能仍然对我们的目标、计划或未来工作产生影响。nn无关,不代表遗忘:即使我们认为某些事情与我们当前的工作或生活无关,也不应该轻易遗忘它们。因为过去的经验和知识可能会在未来的某个时刻变得相关。nn遗忘,不代表不存在:忘记并不意味着事情从未发生过。我们的大脑可能会暂时忘记某些信息,但这并不意味着这些信息就从我们的生活中消失了。nn这些观点提醒我们,在处理任务和生活中的各种事情时,要保持全面的视角和持续的关注。不要满足于表面的完成,而是要深入挖掘每个阶段的价值和意义,以便更好地成长和进步。
作者: Jefsky
-
Laravel 面试及回答
**Q1. 什么是Laravel?**nn答:Laravel是一个基于MVC设计模式的免费开源“PHP框架”。nn它由Taylor Otwell创建。Laravel提供了富有表现力和优雅的语法,有助于轻松快速地创建出色的Web应用程序。nn**Q2. 列出Laravel提供的一些官方包?**nn答:nn- Cashiern- Envoyn- Passportn- Scoutn- Socialitenn**Q3. 列出Laravel的最新功能。**nn答:nn- 内置的CSRF(跨站请求伪造)保护。n- 内置的分页n- 反向路由n- 查询构建器n- 路由缓存n- 数据库迁移n- IoC(控制反转)容器或服务容器。nn**Q4. 列出Laravel相对于其他Php框架的一些优势。**nn答:nn- 与其他框架相比,设置和定制过程既简单又快速。n- 内置的身份验证系统。n- 支持多个文件系统n- 预加载的包,如Laravel Socialite、Laravel cashier、Laravel elixir、Passport、Laravel Scout。n- Eloquent ORM(对象关系映射)与PHP活动记录实现。n- 内置的命令行工具“Artisan”,用于创建代码骨架、数据库结构并构建其迁移。nn**Q5. 什么是composer?**nn答:Composer是用于安装PHP应用程序依赖项的PHP依赖项管理器。nn**Q6. 如何通过composer安装laravel?**nn答:`composer create-project laravel/laravel your-project-name version`nn**Q7. 如何检查laravel的当前版本?**nn答:您可以使用artisan命令的–version选项来检查Laravel安装的当前版本。nn用法:nn- `php artisan –version`nn**Q8. 什么是php artisan。列出一些artisan命令?**nn答:PHPartisan是Laravel附带的命令行界面/工具。它提供了许多有用的命令,可以帮助您更轻松地构建应用程序。以下是一些artisan命令的列表:nn- `php artisan list`n- `php artisan help`n- `php artisan tinker`n- `php artisan make`n- `php artisan –version` (注意:这里应该是`–version`,而不是您在问题中写的`–versian`)n- `php artisan make modal modal_name` (注意:这里可能是个笔误,应该是`php artisan make model model_name`)n- `php artisan make controller controller_name`nn**Q9. 解释Laravel中的事件?**nn答:事件是由程序检测并处理的某个事件或发生的情况。Laravel事件提供了一个简单的观察者实现,允许我们在应用程序中订阅和监听事件。以下是Laravel中的一些事件示例:nn- 新用户已注册n- 发布了新评论n- 用户登录/注销n- 添加了新产品。nn**Q10. 如何在Laravel中启用查询日志?**nn答:使用`enableQueryLog`方法:nn`DB::connection()->enableQueryLog();`nn您可以通过使用`getQueryLog`方法获取已执行的查询数组:nn`queries = DB::getQueryLog();`nn**Q11. 如何在Laravel中为路由关闭CRSF保护?**nn答:在“app/Http/Middleware/VerifyCsrfToken.php”中n//添加一个路由数组来跳过CSRF检查nn`privateexceptUrls = [‘controller/route1’, ‘controller/route2’];`nn//修改这个函数n`public function handle(request, Closurenext)`nn`{`n//添加这个条件nn`foreach(this->exceptUrls asroute) {`n`if (request->is(route)) {`n`return next(request);`n`}`n`}`n`return parent::handle(request,next);`n`}`nn(注意:直接在中间件中硬编码要跳过的URL通常不是最佳实践。这只是一个示例来说明如何操作。在实际应用中,您可能会找到更灵活和安全的方法来处理此问题。)nn**Q12. 什么是Lumen?**nn答:Lumen是一个基于Laravel顶级组件构建的PHP微框架。它由Taylor Otwell创建。它是构建基于Laravel的微服务和快速REST API的完美选择。它是可用的最快的微框架之一。nn**Q13. 什么是laravel facades?**nn答:Laravel Facades为应用程序服务容器中的类提供了一个类似静态的接口。Laravel自带了许多facades,这些facades提供了对Laravel大部分功能的访问。Laravel Facades作为底层服务容器中类的“静态代理”,提供了比传统静态类方法更简洁、更富有表现力的语法,同时保持了更好的可测试性和灵活性。Laravel的所有facades都定义在`Illuminate\Support\Facades`命名空间中。您可以轻松地访问一个Facade,如下所示:nn`use Illuminate\Support\Facades\Cache;`nn`Route::get(‘/cache’, function () {`nn`return Cache::get(‘key’);`nn`});`nn**Q14. 什么是laravel Contracts?**nn答:Laravel的Contracts是一组定义Laravel框架提供的核心服务的接口。nn**Q15. 解释Laravel服务容器?**nn答:Laravel的服务容器是其最强大的功能之一,它是一个用于解析类依赖项和执行依赖项注入的强大工具。依赖项注入是一个花哨的短语,它本质上意味着类的依赖项是通过构造函数或(在某些情况下)通过“setter”方法“注入”到类中的。nn(注意:您提供的文本在这里中断了,所以我没有关于“您可以从这里阅读更多关于Laravel的内容”的翻译。)nn**Q16. 在Laravel中如何获取用户的IP地址?**nn答:您可以使用以下函数来获取用户的IP地址:nn`public function getUserIp(Request request) {`nn`// 获取远程用户的IP地址`nn`returnuser_ip_address = request->ip();`nn`}`nnnn**Q17. 如何在Laravel模型中使用自定义表?**nn**答:** 我们可以通过重写Eloquent的`table`属性来在Laravel中使用自定义表。以下是一个示例:nn“`phpnclass User extends Model { // 注意:应该是 Model 而不是 Eloquentn protected table = “my_user_table”;n}n“`nn**Q18. Laravel Eloquent是什么?**nn**答:** Laravel包含的Eloquent ORM为数据库操作提供了一个简洁、优雅的ActiveRecord实现。每个数据库表都有一个对应的“模型”,用于与该表进行交互。模型允许您查询表中的数据,以及向表中插入新记录。nn**Q19. 如何在Laravel模型中定义可填充属性?**nn**答:** 您可以通过重写Laravel Eloquent的`fillable`属性来定义可填充属性。以下是一个示例:nn“`phpnclass User extends Model {n protected fillable = [‘id’, ‘first_name’, ‘last_name’, ‘age’]; // 注意:通常不推荐将’id’包含在fillable属性中,因为它通常是自动增长的n}n“`nn**Q20. Laravel的vendor目录中包含什么?**nn**答:** 我们通过composer安装的所有包都保存在Laravel的vendor目录中。nn**Q21. 在Laravel中,控制器位于哪个目录?**nn**答:** 我们将所有的控制器保存在`app/Http/Controllers`目录中。(注意:大小写和目录结构需要准确)nn**Q22. PHP的compact函数是做什么的?**nn**答:** PHP的compact函数接受一个或多个字符串参数,并尝试找到与这些字符串同名的变量。如果找到了变量,它就创建一个关联数组,其中键是变量名,值是变量的值。nn**Q23. 定义ORM?**nn**答:** 对象关系映射(ORM)是一种编程技术,用于在面向对象编程语言中将数据在不兼容的类型系统之间进行转换。nn**Q24. 如何使用Eloquent在Laravel中创建记录?**nn**答:** 要使用Laravel Eloquent在数据库中创建新记录,只需创建一个新的模型实例,设置模型的属性,然后调用save方法。以下是一个示例用法:nn“`phpnpublic function saveProduct(Requestrequest) {n product = new Product; // 注意:类名应该是Product,首字母大写,并且与模型文件名匹配nproduct->name = request->name;nproduct->description = request->description; // 这里应该是description而不是重复的namenproduct->save();n}n“`nn**Q25. 列出Laravel查询构建器提供的一些聚合方法?**nn**答:**n- `count()`n- `max()`n- `min()`n- `avg()`n- `sum()`nn**Q26. Laravel中Eloquent的`cursor()`方法的用途是什么?**nn**答:** `cursor`方法允许您通过游标迭代数据库记录,这只会执行单个查询。在处理大量数据时,`cursor`方法可用于大大减少内存使用量。nn示例用法:nn“`phpnforeach (Product::where(‘name’, ‘bar’)->cursor() as product) {n // 执行一些操作n}n“`nn**Q27. 如何在Laravel中获取已登录用户的信息?**nn**答:** 使用`Auth::user()`函数可以在Laravel中获取已登录用户的信息。用法如下:nn“`phpnif (Auth::check()) {nloggedInUser = Auth::user();n dd(loggedInUser);n}n“`nn**Q28. Laravel中的闭包是什么?**nn**答:** 闭包是一个匿名函数,可以分配给变量或作为参数传递给其他函数。闭包可以访问在其创建时所在作用域之外的变量。nn**Q29. Laravel的优点是什么?**nn**答:**n- 语法简单且一致n- 设置过程简单n- 定制过程简单n- Laravel的代码总是规整的nn**Q30. Laravel 5.0的特性是什么?**nn**答:**n- 方法注入n- 合约(Contracts)n- 路由缓存n- 事件对象n- 多文件系统n- 身份验证脚手架n- dotenv – 环境检测n- Laravel调度器nn**Q31. 比较Laravel和CodeIgniter?**nn**答:** (此问题较为开放,以下是比较的一些方面)n- Laravel具有表达性和优雅的语法,而CodeIgniter是一个功能强大的PHP框架,提供简单的工具集来创建全功能的Web应用程序。n- Laravel的开发过程是一种令人愉快和富有创造性的体验,而CodeIgniter以其简单和优雅的工具包而闻名。n- Laravel是为PHP的最新版本构建的,而CodeIgniter是一个更旧、更成熟的框架。n- Laravel与CodeIgniter相比更加面向对象。n- Laravel社区虽然规模仍然较小,但增长非常迅速,而CodeIgniter社区规模较大。nn**Q32. 什么是Bundles、Reverse Routing和IoC容器?**nn**答:**n- Bundles:这些是您可以下载并添加到Web应用程序中的小功能。但在Laravel中,更常见的术语是“包”(Packages),而不是Bundles。这可能是对旧版Laravel或另一个框架的引用。n- 反向路由:这允许您更改路由,应用程序将更新所有相关链接以匹配此更改。Laravel通过命名路由提供了此功能。n- IoC容器:IoC(控制反转)容器为您提供了生成新对象的方法,并可选择实例化和引用单例。Laravel的服务容器是一个强大的IoC容器实现。nn**Q33. 如何在Laravel中设置数据库连接?**nn**答:** 数据库配置文件路径是:`config/database.php`。以下是一个数据库配置文件的示例:nn“`phpn’mysql’ => [n ‘read’ => [n ‘host’ => ‘localhost’,n ],n ‘write’ => [n ‘host’ => ‘localhost’n ],n ‘driver’ => ‘mysql’,n ‘database’ => ‘database’,n ‘username’ => ‘root’,n ‘password’ => ”,n ‘charset’ => ‘utf8’,n ‘collation’ => ‘utf8_unicode_ci’,n ‘prefix’ => ”,n],n“`n但是,请注意,Laravel通常不会为读写分离配置单独的`’read’`和`’write’`键。这可能是对特定设置或扩展包的引用。在标准的Laravel配置中,您通常会看到类似`’connections’`键下的配置。nn**Q34. 如何启用查询日志记录?**nn**答:** 使用`DB::connection()->enableQueryLog();`可以启用查询日志记录。之后,您可以使用`DB::getQueryLog();`来检索已执行的查询列表。nn**Q35. 如何在Laravel中使用select查询?**nn**答:** `users = DB::select(‘select * from users where city_id = ?’, [10]);`。注意,我添加了一个包含绑定参数的数组,这是推荐的方式来避免SQL注入攻击。之后,您可以像下面这样遍历结果:nn“`phpnif (!empty(users)) {n foreach (users as user) {n // 处理每个用户的数据n }n}n“`nn这些问题和答案看起来像是关于Laravel框架的常见问题集(FAQ)。不过,有几个问题的答案存在重复或者需要改进的地方。以下是对这些问题的翻译和改进后的答案:nn**Q36: 在Laravel中如何使用Insert语句?**nn**答:**nnn“`phpnDB::insert(‘insert into users (id, name, city_id) values (?, ?, ?)’, [1, ‘Web technology’, 10]);n“`n或者使用Eloquent ORM:nnn“`phpnuser = new User;nuser->id = 1;nuser->name = ‘Web technology’;nuser->city_id = 10;nuser->save();n“`n**Q37: 在Laravel中如何使用Update语句?**nn**答:**nnn“`phpnDB::update(‘update users set city_id = 10 where id = ?’, [1015]);n“`n或者使用Eloquent ORM:nnn“`phpnUser::where(‘id’, 1015)->update([‘city_id’ => 10]);n“`n**Q38: (重复了Q37)在Laravel中如何使用Update语句?**nn**答:** (同Q37的答案)nn**Q39: 在Laravel中如何使用Delete语句?**nn**答:**nnn“`phpnDB::delete(‘delete from users where id = ?’, [1015]);n“`n或者使用Eloquent ORM:nnn“`phpnUser::destroy(1015);n“`n**Q40: Laravel支持缓存吗?**nn**答:** 是的,Laravel提供了缓存支持。nn**Q41: 什么是HTTP中间件?**nn**答:** 中间件提供了一个方便的机制来过滤进入你的应用的HTTP请求。例如,Laravel包括一个中间件来验证你的应用的用户是否已经认证。如果用户未认证,中间件会将用户重定向到登录屏幕。然而,如果用户已经认证,中间件将允许请求进一步进入应用。当然,除了认证之外,还可以编写额外的中间件来执行各种任务。一个CORS中间件可能负责向离开你的应用的所有响应添加适当的头。一个日志中间件可能会记录所有进入你的应用的请求。Laravel框架中包含几个中间件,包括用于认证和CSRF保护的中间件。所有这些中间件都位于`app/Http/Middleware`目录中。nn**Q42: 什么是数据库迁移?如何使用它来向数据库添加初始数据?**nn**答:** 迁移就像数据库的版本控制,允许你的团队轻松地修改和共享应用的数据库模式。迁移通常与Laravel的模式构建器配对,以轻松构建你的应用的数据库模式。如果你曾经不得不告诉队友手动向他们的本地数据库模式添加列,那么你就遇到了数据库迁移要解决的问题。Laravel包括一个使用种子类向数据库添加测试数据的简单方法。所有的种子类都存储在`database/seeds`目录中。种子类可以有任何你想要的名称,但可能应该遵循一些合理的约定,如`UsersTableSeeder`等。默认情况下,为你定义了一个`DatabaseSeeder`类。从这个类中,你可以使用`call`方法来运行其他种子类,允许你控制播种顺序。要向数据库添加初始数据,你可以创建一个种子类并在其中定义要插入的数据。然后,你可以使用`php artisan db:seed`命令来运行种子类并插入数据。你还可以在迁移中使用`DB::table()->insert()`方法来插入初始数据。但是,这通常不是最佳实践,因为它将数据插入逻辑与数据库模式更改混合在一起。相反,最好使用种子类来管理初始数据插入。nn**Q43: Laravel安装时需要哪些目录可写?**nn**答:** 安装Laravel后,你可能需要配置一些权限。`storage`目录和`bootstrap/cache`目录内的目录应该可由你的Web服务器写入,否则Laravel将无法运行。如果你正在使用Homestead虚拟机,这些权限应该已经设置好了。nn**Q44: 如何在Laravel中实现自己的包?**nn**答:** 你可以按照以下步骤在Laravel中创建自己的包:nn1. **包文件夹和名称**:首先,为你的包创建一个文件夹,并给它一个唯一的名称。这通常是在`packages`目录下完成的(如果你还没有这个目录,你需要创建它)。例如,你可以创建一个名为`vendor/package`的目录结构。n2. **Composer.json文件**:在包的根目录下创建一个`composer.json`文件。这个文件描述了你的包及其依赖关系。确保包含名称、描述、版本、作者、要求和其他相关信息。n3. **通过主composer.json和PSR-4加载包**:在你的主Laravel项目的`composer.json`文件中,你需要添加一个PSR-4自动加载条目来指向你的包。例如:`”psr-4″: { “Vendor\\Package\\”: “packages/vendor/package/src” }`。然后运行`composer dump-autoload`来重新生成自动加载文件。n4. **创建服务提供者**:服务提供者是Laravel包的核心部分之一。它负责绑定服务到容器、注册事件、路由等。创建一个继承自`Illuminate\Support\ServiceProvider`的类,并在其中定义你的包的启动和服务绑定逻辑。n5. **创建控制器**:为你的包创建一个或多个控制器来处理请求和响应。这些控制器应该放在包的`src/Http/Controllers`目录中。n6. **创建路由文件**:在包的`src/routes`目录下创建一个路由文件(例如`web.php`),并定义你的包的路由。然后,在你的服务提供者的`boot`方法中,使用`$this->loadRoutesFrom()`方法来加载这些路由。n7. **注册服务提供者**:最后,你需要在Laravel的配置文件中注册你的服务提供者。这通常是在`config/app.php`文件的`providers`数组中完成的。添加你的服务提供者的完整类名到该数组中。n8. **发布资源**:如果你的包包含配置文件、视图、迁移等,你可能还需要使用Laravel的发布功能来将这些资源发布到主Laravel项目中。这可以通过在你的服务提供者中定义`publishes`属性来实现。然后,用户可以使用`php artisan vendor:publish`命令来选择性地发布你的包的资源。nn**Q45. Laravel 4 和 Laravel 5.x 之间的主要区别是什么?**nn**答:**总结 Laravel 5.0 从上述文章的发布说明:nn- 旧的app/models目录已被完全移除。n- 控制器、中间件和请求(Laravel 5.0 中的一种新类型的类)现在被分组在 app/Http 目录下。n- 一个新的 app/Providers 目录替换了 Laravel 4.x 之前版本中的 app/start 文件。n- 应用程序语言文件和视图已移动到 resources 目录中。n- 所有主要的 Laravel 组件都实现了位于 illuminate/contracts 存储库中的接口。n- 新的 route:cache Artisan 命令可以大大加速路由的注册。n- Laravel 5 现在支持 HTTP 中间件,并且包含的认证和 CSRF “过滤器” 已经被转换为中间件。n- 您现在可以在控制器方法上键入依赖提示。n- 用户注册、身份验证和密码重置控制器现在已开箱即用,以及位于 resources/views/auth 的简单对应视图。n- 您现在可以将事件定义为对象,而不仅仅是使用字符串。n- 除了 Laravel 4 支持的队列作业格式外,Laravel 5 还允许您将排队作业表示为简单的命令对象。这些命令位于 app/Commands 目录中。n- Laravel 中现在包含一个数据库队列驱动程序,它提供了一个简单的本地队列驱动程序,除了数据库软件之外,不需要安装额外的包。n- Laravel 命令调度程序允许您在 Laravel 本身内流畅且富有表现力地定义您的命令调度,并且您的服务器上只需要一个 Cron 条目。n- php artisan tinker 命令现在使用 Justin Hileman 的 Psysh,这是一个更强大的 PHP REPL。n- Laravel 5 现在使用 Vance Lucas 的 DotEnv。n- Jeffrey Way 的 Laravel Elixir 为编译和连接您的资产提供了一个流畅、富有表现力的界面。n- Laravel Socialite 是一个可选的、与 Laravel 5.0+ 兼容的包,它提供了与 OAuth 提供商完全无痛的认证。n- Laravel 现在包含了强大的 Flysystem 文件系统抽象库,它与本地、Amazon S3 和 Rackspace 云存储提供了无痛的集成 – 所有这些都通过一个统一且优雅的 API!n- Laravel 5.0 引入了表单请求,它扩展了 Illuminate\Foundation\Http\FormRequest 类。这些请求对象可以与控制器方法注入相结合,以提供无需样板的方法来验证用户输入。n- Laravel 5 基础控制器现在包含一个 ValidatesRequests 特性。此特性提供了一个简单的 validate 方法来验证传入的请求。n- 框架中添加了新的 Artisan 生成器命令。n- 流行的 dd 辅助函数(用于转储变量调试信息)已升级为使用神奇的 Symfony VarDumper。nn**Q46. 什么是路由,如何编写,以及编写它的不同方式是什么?**nn**答:**在 Laravel 中,路由是指定义应用程序端点与对应处理这些请求的代码之间的映射的过程。路由允许您指定应用程序的 URL 结构,并将这些 URL 映射到相应的控制器或处理逻辑上。nn路由定义通常位于 Laravel 项目的 `routes` 目录中。对于 Web 界面,路由通常定义在 `routes/web.php` 文件中;而对于无状态的 API 路由,它们则定义在 `routes/api.php` 文件中。nn**编写路由的基本方式**:nn1. **基础路由**:直接映射一个 URL 到一个闭包函数。nnn“`phpnRoute::get(‘/welcome’, function () {n return view(‘welcome’);n});n“`n2. **路由到控制器**:将一个 URL 映射到一个控制器的方法。nnn“`phpnRoute::get(‘/user/{id}’, ‘UserController@show’);n“`n3. **命名路由**:为路由指定一个名称,以便在生成 URL 或重定向时使用。nnn“`phpnRoute::get(‘/user/{id}/profile’, ‘UserController@profile’)->name(‘profile’);n“`n4. **路由组**:将多个路由分组在一起,共享属性,如中间件或命名空间。nnn“`phpnRoute::middleware([‘auth’])->group(function () {n Route::get(‘/user/profile’, ‘UserController@profile’);n Route::get(‘/user/settings’, ‘UserController@settings’);n});n“`n5. **路由模型绑定**:将路由参数自动解析为 Eloquent 模型实例。nnn“`phpnRoute::get(‘/posts/{post}’, ‘PostsController@show’);n“`n6. **表单方法伪造**:使用 `POST` 请求来模拟 `PUT`、`PATCH` 或 `DELETE` 请求。n7. **路由回退/通配符路由**:匹配所有其他路由的“捕获所有”路由。n8. **访问控制**:使用中间件来限制对路由的访问,如 `auth` 中间件用于需要身份验证的路由。n9. **API 资源路由**:为构建 RESTful API 提供了一种快速声明路由的方法。例如,使用 `Route::resource()` 或 `Route::apiResource()` 方法。n10. **路由缓存**:为了提高性能,可以使用 `php artisan route:cache` 命令来缓存路由定义。这在生产环境中特别有用,因为它可以减少注册所有路由所需的时间。但是,请注意,在使用路由缓存时,每次修改路由定义后都需要重新缓存路由。nn###### [转载自 mytectra —— Laravel Interview Questions and Answers](https://www.mytectra.com/interview-question/laravel-interview-questions-and-answers “转载自 mytectra —— Laravel Interview Questions and Answers”)
-
Laravel 视图模块共享数据
## 创建一个新的服务提供者类nn`php artisan make:provider AbcProvider`nn## 修改服务提供类文件nn“`n// 引入view类nuse Illuminate\Support\Facades\View;n// 修改boot()npublic function boot()n{n // View::composer(‘*’,调用的控制器)n // * 全局共享n View::composer(‘*’,’App\Http\Controllers\CommonController’);n}n“`nn## 注册服务n### 修改 `config\app.php Autoloaded Service Providers部分`n“`n ‘providers’ => ServiceProvider::defaultProviders()->merge([n //用来为所有视图共享数据n App\Providers\ComposerServiceProvider::class,n ])->toArray(),n“`nn## 完善 `CommonController`n“`npublic function compose(View view){n //与所有视图共享数据nlinks = Link::orderBy(‘created_at’, ‘desc’)->get();n view->with([n ‘links_list’ =>links,n ]);n}n“`nn## 视图调用n`{{$links_list}}`
-
Laravel 创建一个模块简要流程
## 创建数据迁移文件n`php artisan make:migration create_links_table`nn## 修改迁移文件n`{timestamp}_create_links_table.php`n- 迁移时调用 `up()`n- 回滚时调用 `down()`nn### 创建数据表n Schema::create(‘links’, function (Blueprint table) {ntable->id();n table->string(‘title’),ntable->timestamps();n });nn##### 注意n- migrate 命令只执行未未迁移的文件,执行完成后将生成 2 个表:n – migrations —— 迁移版本n – columns —— 数据nn## 执行迁移n`php artisan migrate`n## 创建模型n`php artisan make:model Link`n## 创建模型工厂文件n`php artisan make:factory LinkFactory`n### 修改工厂文件n public function definition()n {n return [n ‘name’ => this->faker->name()n ];n }n- Faker 是一个假数据生成库,name() 是 faker 提供的 API ,随机生成人名。我们用来填充 name 专栏名称字段。nn## 创建填充文件n`php artisan make:seeder LinksSeeder`n- `run()` 方法会在 `db:seed` 执行nn### 修改填充文件n“`n public function run()n {n Link::factory()->count(10)->create();n }n“`n- 生成10条数据nn## 注册数据填充n`databases/seeders/DatabaseSeeder.php`nn public function run()n {nthis->call(ColumnsSeeder::class);n }n##### 注意n- 需要移除无用的数据填充,以防止重复填充nn## 执行数据填充n`php artisan db:seed`
-
让你的安卓手机也运行vscode
n原理
nnnn并不是在你的安卓手机上安装visual code,实际是在你的手机上安装一个ubuntu,然后部署一个code-server,如果你知道了,那就不用继续往下看,如果你看不懂我在说什么,那就请随我来
nnnn准备
nnnn安卓手机(最好能有桌面模式)
nnnn
Termux 一个不需要root的终端仿真器(自己去Google Play酷安下载)
termux-ubuntu 小型ubuntu
code-server visual code服务步骤
nnnn- n
- 手机安装Termux nnnn
- 进入Termux,下载termux-ubuntu nnnn
- 解压并安装部署termux-ubuntu nnnn
- 进入termux-ubuntu,下载code-server nnnn
- 开启code-server nnnn
- 此时,你就可以在你的手机上用浏览器访问http://localhoust:8080,就可以使用vscode了 n
它就是一个完整的vscode,你可以在上面下载及运行插件,执行cmd等
n -
count(): Parameter must be an array or an object that implements Countable
n处理mysql问题:
nnnnWarning in ./libraries/sql.lib.php#613 count(): Parameter must be an array or an object that implements Countable
nnnnsudo vim /usr/share/phpmyadmin/libraries/sql.lib.php
nnnn将(count($analyzed_sql_results[‘select_expr’] == 1) 改为
nnnn(count($analyzed_sql_results[‘select_expr’]) == 1
n -
VMware15 安装 mac OS 10.14 无法全屏
n在系统中执行终端
nnnn1920*1080分辨率:
nnnnsudo nvram AC20C489-DD86-4E99-992C-B7C742C1DDA9:width=%80%07%00%00
nnnnsudo nvram AC20C489-DD86-4E99-992C-B7C742C1DDA9:height=%38%04%00%00
nnnn3840*2160分辨率:
nnnnsudo nvram AC20C489-DD86-4E99-992C-B7C742C1DDA9:width=%00%0F%00%00
nnnnsudo nvram AC20C489-DD86-4E99-992C-B7C742C1DDA9:height=%70%08%00%00
nnnn解释一下:
nnnnwidth=%00%0F%00%00 是宽度的16进制表示,将四个数字倒过来写就是 00 00 0f 00, 相当于十进制的3840
nnnnheight=%70%08%00%00 是高度的16进制表示,将四个数字倒过来写就是 00 00 08 70, 相当于十进制的2160
nnnn还需要修改一下虚拟机的显示配置,把监视器的分辨率修改为你要的分辨率
nnnn再然后下载VMware15对应的vmtools安装,重启机器然后在看是否生效。
nnnn
也可以修改对应的vmx文件里面的这部分内容要修改一下,设置一下最大分辨率svga.autodetect = “FALSE”svga.maxWidth = “3840”svga.maxHeight = “2160”然后下载安装对应的vm tool
nnnn
http://softwareupdate.vmware.com/cds/vmw-desktop/fusion/11.0.0/10120384/packages/com.vmware.fusion.tools.darwin.zip.tar重启就好了
n
(亲测) -
升级WordPress提示:另一更新正在进行
n我的版本是5.4.2,安装完成后提示有更新,但执行更新后总是提示“另一更新正在进行”.
nnnn
后来发现,升级的时候,WordPress会在数据库中wp_options表里增加一条更新记录core_updater.lock用来标记当前的升级状态。所以,如果中途打断升级,这个记录会留在数据库中。当下次升级时,WordPress检测到此记录的存在就会返回“另一更新正在进行”。解决方案:
n
删除数据库wp_options表中core_updater.lock记录 -
手机听歌不过瘾?一招将Win10电脑变成蓝牙音箱
n很多网友都喜欢用手机听歌,不过话说回来,这东西只适合接驳耳机,如果使用外放,无论如何也是没法和台式音响媲美的。
nnnn如果你有一台装有Win10 v2004的电脑,这里倒有一个小技巧,可以将你的电脑直接变身为“蓝牙音箱”。
nnnn一分钱不花,就能让手机音乐从电脑音响里流出了。
nnnn蓝牙连接
nnnn手机和电脑同时开启蓝牙连接,其中手机的开启比较容易,这里不再多说。
nnnn电脑端需要进入“设置”→“设备”→“蓝牙和其他设备”,在保证“蓝牙”为开启状态后,点击“添加蓝牙或其他设备”→“蓝牙”。
nnnn稍等片刻,屏幕上会显示出你的手机图标,再次点击就会生成连接密钥。
nnnn手机端也是同样的操作,当电脑端发起连接后,手机端也会同步显示秘钥,如果两者的秘钥完全一致,就可以点击手机上的“配对“图标,将手机与电脑连通。
nnnn注:个别手机系统具有安全设定,如果电脑端发起的连接不成功,也可尝试从手机端发起连接,一般都可以连接完成。
nnnn下载“Bluetooth Audio Receiver”应用
nnnn打开应用商店,搜索“Bluetooth Audio Receiver”,点击“获取”按钮,让Win10自动下载并安装“Bluetooth Audio Receiver”。
nnnn连接手机
nnnn打开“Bluetooth Audio Receiver”,点击你的手机,此时下方的“Open Connection“按钮将被点亮。
nnnn点击这个按钮,等待设备后面的”Disconnected“变成”Connected“,即代表电脑端已经准备好接收手机蓝牙传来的语音数据了。
nnnn连接成功后,手机端播放的音乐便直接从电脑音箱响起。
nnnn当然由于接收的是媒体+语音数据,因此除了音乐以外,微信、视频等声音信号也会通过电脑音箱播出,如果里面有一些隐私消息的话,就得留点儿神了,毕竟整成”大喇叭“可不好。
nnnn最后点击“Bluetooth Audio Receiver“中的”Close Connection“即可中断连接,此外手机端也可控制音箱的输出音量大小,总体来说还是挺方便的。
n -
url重写,省略index.php
nhttpd.conf配置文件中加载mod_rewrite.so模块;AllowOverroide None 将 None 改为 All
n